1. JavaScript的类型,string, number, boolean, array, object, null, undefine
2. js变量
函数内声明的为局部变量,只在函数内访问;函数外声明的为全局变量,网页上所有脚本和函数都可以访问。
局部变量会在函数运行后被删除;全局变量会在页面关闭后被删除。
把值赋给尚未声明的变量,该变量将被自动作为全局变量声明,即使是在函数内赋值,也是如此。
1.let, const
变量命名,let和const。
let具有块级作用域,不存在变量提升,不能重复声明,全局作用域下不是window对象的属性。
const限定的是,变量指向的地址不能变。对于简单类型(数值、字符串、布尔值),值就保存在这个地址里,而复合类型(数组和对象),变量指向的地址,保存的是指针。
变量比较,必须用'==='和'!=='
2.解构赋值
变量解构赋值,本质上是一种“模式匹配”,等号两边模式相同,左边变量就会被赋予对应的值。解构不成功的变量值为undefined。可以使用默认值。
对象的解构,变量必须与属性同名,才能取到正确的值。也可以用{模式: 变量}的形式进行解构。
解构赋值的规则是,只要等号右边的值不是对象或数组,就先转化为对象。由于undefined和null无法转为对象,所以对它们进行解构赋值会报错。
函数参数也可以使用解构赋值。
数组的解构赋值用'[]',对象的解构赋值用'{}',字符串会转化为类数组,所以也用'[]'。
解构赋值的用途:
1)交换变量的值
2)从函数返回多个值
3)函数参数的定义
4)提取JSON数组
5)函数参数的默认值
6)遍历Map解构
6)import模块的指定方法
3.字符串的扩展
模板字符串:模板字符串是增强版的字符串,用反引号(`)标识,可以用作普通字符串、定义多行字符串、在字符串中以(${varName})的形式嵌入变量。大括号内可以放入任意的JavaScript表达式。
Promise将value resolve出来,作为后续then的参数
Promise.resolve(value)
.then((value) => {
})
Promise.reject(error)
.catch((e) => {
})
######事件循环
JavaScript的并发模型基于“事件循环”。
js引擎维护一个**消息队列**,每个消息都有一个处理函数与之关联。当一个事件发生且对事件绑定了监听器时,就会把该事件及其处理函数添加到消息队列中,没有监听器则会丢失。
而主循环用于从消息队列中取出消息,并执行处理函数。每一个消息完整执行后,其他消息才会被执行,函数不会被抢占。当队列中没有任何消息时,会等待同步消息地到达。
setTimeout会在给定时间之后,将小题添加到消息队列,并不保证立刻执行。