您的位置:首页 > Web前端 > JavaScript

01-初识JavaScript(JavaScript基础学习笔记)

2020-08-17 21:32 573 查看

初识JavaScript

  • 在HTML中使用JavaScript
  • noscript标签
  • JavaScript基础语法
  • 基础概念

      JavaScript是一个 面向对象、跨平台的脚本语言。

    JavaScript与HTML、CSS的关系

      一个网页由 JavaScript、HTML和CSS三个部分组成,如果我们将一个网站比作是一栋大楼,那么它们的作用分别如下:

    • HTML:相当于大楼的骨架,用来确定网页的结构
    • CSS:相当于大楼的装修,用来确定网页的样式
    • JavaScript:相当于大楼的物业,让网页具备用户交互的功能

    JavaScript的组成

      虽然JavaScript和ECMAScript通常被人们用来表达相同的含义,但实际上JavaScript的含义要比ECMAScript中规定的多得多。一个完整的JavaScript应该由下面三个不同的部分组成:

    • ECAMScript:定义了JavaScript的语法规范,是JavaScript的核心,描述了语言的基本语法和数据类型。ECMAScript是一套标准(定义了一种语言的标准),与具体的实现无关
    • BOM(浏览器对象模型):提供一套操作浏览器功能的API,通过BOM可以操作浏览器窗口(比如:弹出框、控制浏览器跳转、获取分辨率等)。
    • DOM(文档对象模型):提供了一套操作页面元素的API,DOM可以把HTML看作是文档树,通过DOM提供的API可以对树上的节点进行操作。

    在HTML中使用JavaScript

    script标签

      向HTML页面中插入JavaScript的主要方法就是使用script标签,它的主要的属性如下:

    属性名称 属性说明
    async 表示应该立即下载脚本,但不妨碍页面中的其它操作(比如下载其它资源或等待加载其它脚本),只对外部脚本文件有效。(可选)
    charset 表示字符集,大多数浏览器会忽略它,基本上没啥用。(可选)
    defer 表示脚本可以延迟到文档完全被解析和显示之后再执行,只对外部脚本有效。(可选)
    src 表示要执行代码的外部文件的路径。(可选)
    type 用来表示写代码的脚本语言的类型,没有必要指定该属性,默认情况下就是 text/javascript。(可选)

    页面加载JavaScript的方式

      有两种引入JavaScript的方式:

    1. 内联JavaScript脚本

      可以通过script标签在html页面中直接写入JavaScript脚本:

    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>内联JavaScript</title>
    </head>
    <body>
    <script>
    alert("Hello World!");
    </script>
    </body>
    </html>

    注意: 在script中嵌入JavaScript代码的时候,不要在任何地方出现 ‘</script>’ 的字符串,否则会报错。因为浏览器遇到这个字符串就会把它当作结束标签,可以通过下面的方式解决:

    <script>
    function sayHi () {
    alert(“<\/script>");
    }
    </script>

    2. 引入外部的JavaScript文件

      通过给script指定src属性type属性(可以省略)来引入外部的JavaScript文件:

    // out.js 文件
    alert("Hello World!");
    <!-- index.html 文件 -->
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    </head>
    <body>
    <script src="./out.js"></script>
    </body>
    </html>

    注意:一个script标签要么用来编写内部的js代码,要么用来引入外部的js文件,不能同时使用,同时使用的时候内联的js代码会失效,只会执行外部的js文件:

    <script src="out.js">
    // 这段文本不会被执行,只会执行外部js文件中的代码
    alert("Hello World!");
    </script>

      script标签是可以重复指定的,浏览器会按照从上到下的顺序去执行这些script标签中的javascript代码:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Document</title>
    </head>
    <body>
    <script>
    document.write("<h1>第一个script标签</h1>")
    </script>
    <script>
    document.write("<h1>第二个script标签</h1>")
    </script>
    <script>
    document.write("<h1>第三个script标签</h1>")
    </script>
    </body>
    </html>

    script标签的位置

      按照惯例,所有的script标签都应该放在head标签中:

    <html>
    <head>
    <title>页面标题</title>
    <script src="example1.js">          </script>
    <script src="example2.js">          </script>
    <!-- ... -->
    </head>
    <body>
    页面内容
    </body>
    </html>

      这种做法就意味着必须等到所有的JavaScript代码都被下载、解析和执行完成之后才能开始呈现页面的内容,这样会导致页面出现延迟。所以现在一般将JavaScript引用放到body元素中,放在所有页面元素的后面,如:

    <html>
    <head>
    <title>页面标题</title>
    </head>
    <body>
    页面内容
    <script src="example1.js">          </script>
    <script src="example2.js">          </script>
    </body>
    </html>

    延迟脚本

      从HTML4.0后,为script标签增加了defer属性,这个属性的用途是表明脚本在执行时不会影响页面的构造。也就是说脚本会延迟到页面解析完毕后再执行,相当于告诉浏览器立即下载、但是延迟执行:

    <html>
    <head>
    <title>页面标题</title>
    <script src="example1.js" defer="defer"></script>
    <script src="example2.js" defer="defer"></script>
    </head>
    <body>
    页面内容
    </body>
    </html>

      上面的案例虽然将script放到head中,但脚本会延迟到</html>标签后再执行。理论上第一个延迟脚本会在第二个延迟脚本之前执行,而这两个延迟脚本会先于DOMContentLoaded事件执行,但实际执行时不一定会按照这个顺序去执行,因此最好只包含一个延迟脚本。

    注意:defer属性只适合外部脚本,而且HTML5的实现会忽略这个属性,新的浏览器也支持HTML的规则,会忽略这个属性。所以最好还是不要用这个属性,而是将脚本放在页面底部延迟执行。

    异步脚本

      HTML5为脚本添加了async属性,这个属性和defer属性类似,它也只支持外部脚本文件。它会告诉浏览器立即下载文件,但是不能保存脚本的执行顺序:

    <html>
    <head>
    <title>页面标题</title>
    <script src="example1.js" async></script>
    <script src="example2.js" async></script>
    </head>
    <body>
    页面内容
    </body>
    </html>

      如上面的案例,第二个脚本可能会在第一个脚本之前运行,所以保持脚本之间相互不依赖非常重要。指定了async的目的是为了不让页面等待两个脚本的下载和执行,从而异步加载页面其它内容。但是,建议不要在异步脚本中操作DOM,因为异步脚本会在load事件之前执行,但可能会在DOMContentLoaded事件之前或者之后执行。该属性还存在浏览器兼容的问题。

    noscript标签

      早期浏览器都面临一个特殊的问题:如果浏览器不支持JavaScript时如何让页面平稳的退化。noscript就是为了解决这个问题,用来在不支持JavaScript的浏览器中显示替代的内容。这个标签可以包含能够出现在body文档中的任何HTML标签(script标签除外),包含在noscript中的内容只能在下列情况下才会显示:

    • 浏览器不支持脚本
    • 浏览器支持脚本,但是脚本被禁用
    <html>
    <head>
    <title>页面标题</title>
    <script src="example1.js" async></script>
    <script src="example2.js" async></script>
    </head>
    <body>
    <noscript>
    <p>
    本页面需要浏览器支持(启用)JavaScript。
    </p>
    </noscript>
    </body>
    </html>

    JavaScript基础语法

    注释

      通过注释可以对代码进行解释说明,被注释的部分是不会被执行的。JavaScript提供了两种注释代码的方法:

    • 单行注释
    // 这里是一段注释的文本:下面的代码在控制台输出 Hello World
    console.log("Hello Wolrd");
    • 多行注释
    /*
    这个是一个多行注释:
    下面定义了一个变量age
    该变量被初始化为16
    */
    var age = 16;

    编码习惯

      好的编码习惯可以让代码更加便于阅读理解,在编写JavaScript注意养成以下习惯:

    • 使用分号:虽然不加分号在JavaScript中是没有问题的,但是建议不要省略分号。因为加了分号后可以用软件对代码进行压缩,并且加分号也是良好的编码习惯
    • 使用空格:运算符前后空一个空格,当逗号或者分号后面还有语句的时候也需要空一个空格
    • 代码缩进:很多地方需要进行代码缩进,好的代码缩进可以帮助我们减少代码阅读的时间,提高开发的效率
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>编码习惯</title>
    </head>
    <body>
    <script>
    // 语句后面添加分号
    var str = "求两个数的和:";
    // 逗号后面需要加上空格
    // 赋值语句等号两边需要加上空格
    var number1 = 10, number2 = 20;
    
    // 代码的缩进
    function add (num1, num2) {
    // 运算符前后需要加上空格
    return num1 + num2;
    }
    
    console.log(str + number1 + " + " + number2 + " = " + (number1 + number2));
    </script>
    </body>
    </html>
    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: