将Javascript引入HTML中
通过 <script>
标签
所有属性的目的是按照约定“告诉”浏览器如何处理脚本文件,即什么时候下载,解析执行。
标签位置
过去放在<head>
中,但是这样等到所有 JavaScript 代码都下载、解析和解释完成后,才能开始渲染页面。会出现明显白屏。
推迟执行脚本defer
这个属性表示脚本在执行的时候不会改变页面的结构,浏览器可以立刻下载脚本。浏览器可以先下载源代码,等页面渲染完成后再执行。
异步执行脚本async
浏览器要立刻下载脚本,渲染后续DOM结构。
动态加载脚本
即通用Javascript代码动态添加<script>
标签。在将<script>
元素添加DOM时浏览器不会立即发出请求或执行其内部的代码,相当于async模式。
动态加载影响页面渲染速度。要想让预加载器知道这些动态请求文件的存在,可以在文档头部显式声明它们:
<link rel="preload" href="dynamic.js">
行内代码和外部文件
语言基础
语法
类似C,但比C宽松。
区分大小写
严格模式
语句
分号,多条语句块。
关键字和保留字
变量
ECMAScript 变量是松散类型的,意思是变量可以用于保存任何类型的数据。
有 3 个关键字可以声明变量: var 、 const 和 let 。
声明风格及最佳实践
不使用 var
const 优先, let 次之
数据类型
6 种简单数据类型:Undefined, Null, Boolean, Number, String, Symbol。
1 种复杂数据类型:Object。
因为 ECMAScript 的类型系统是松散的,所以需要一种手段来确定任意变量的数据类型。typeof操作符
对一个值使用 typeof 操作符会返回下列字符串之一:
“undefined” 表示值未定义;
“boolean” 表示值为布尔值;
“string” 表示值为字符串;
“number” 表示值为数值;
“object” 表示值为对象(而不是函数)或 null ;
“function” 表示值为函数;
“symbol” 表示值为符号
Boolean类型
其余5种数据(不包含Symbol)类型转换成false值的情况:
string “”
Number 0,NaN
Object null
Undefined undefined
Null null
Number类型
NaN值的产生,判断方法。
数值转换
其余5种(不包括Symbol)转换成数值类型的函数。
可能出现的情况。String类型
字符串是不可变的。
其它4种类型转换成字符串的方式。
模板字符串。Symbol类型
符号是原始值,且符号实例是唯一、不可变的。符号的用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险。
符号没有字面量语法,这也是它们发挥作用的关键。按照规范,你只要创建 Symbol() 实例并将其用作对象的新属性,就可以保证它不会覆盖已有的对象属性,无论是符号属性还是字符串属性。
凡是可以使用字符串或数值作为属性的地方,都可以使用符号。Object类型
每个Oject实例都有1个属性6个方法。
操作符
一般操作符的对象是数值类型,在ES6以后可以操作字符串和对象类型。
语句
9种语句
if语句
do-while语句
while语句
for语句
for (initialization; expression; post-loop-expression) statement
使用 let 声明迭代器变量,可以将这个变量的作用域限定在循环中。
无法通过 while 循环实现的逻辑,同样也无法使用 for 循环实现。因此 for 循环只是将循环相关的代码封装在了一起而已。for-in语句
for-in 语句是一种严格的迭代语句,用于枚举对象中的非符号键属性,语法如下:
for (property in expression) statement
for-of语句
for-of 语句是一种严格的迭代语句,用于遍历可迭代对象的元素,语法如下:
for (property of expression) statement
for-of 循环会按照可迭代对象的 next() 方法产生值的顺序迭代元素。标签语句和break,continue语句
switch语句
switch 语句可以用于所有7数据类型,如字符串和对象。
条件的值不需要是常量,也可以是变量或表达式。with语句
函数
函数的声明和调用
变量,作用域与内存
没有规则定义变量必须包含什么数据类型,变量的值和数据类型在脚本生命期内可以改变。
原始值和引用值
传递参数
在传递参数时都是按值传递,但是引用类型传递的时引用值,原始类型传递的是原始值。
确定类型
typeof对原始类型有用,对引用类型用处不大。
通常使用instanceof操作符。执行上下文与作用域
内部上下文可以通过作用域链访问外部上下文中的一切,但外部上下文无法访问内部上下文中的任何东西。上下文之间的连接是线性的、有序的
内存管理
基本引用类型