一、Let和Const
let声明变量,可变
const定义常量(实际指的是变量和的内存地址),不可变
只能在其声明或定义的代码块内有效
注:若区块中存在let或者const命令,则这个区块对这些变量和常量在一开始就行成封闭作用域,只要在声明之前使用就会报错(可能会出现暂时性死区)
不能重复声明,否则报错
(一)块级作用域
块级作用域可以任意嵌套
外层作用域不能访问内层作用域的变量
内层作用域可以定义外层作用域的变量
函数中的块级作用域
es6中在块级作用域中可以声明函数
函数声明的语句和let的行为类似,在块级作用域外不能访问
函数声明也会提到块级作用域的头部
(二)ES6声明变量的6种方式
- var
- function
- let
- const
- import
- class
按照一定模式从数组和对象中提取值,然后赋值给变量
如果解构不成功,则变量的值为undefined
不完全解构:等号左边的模式值匹配一部分的等号右边的数组,仍然可以解构成功
解构赋值允指定默认值
默认值可以引起解构的其他变量,但是该变量必须已经声明
(一)对象的解构赋值
数组的元素是按照次序排列的,变量的取值是按照他的位置决定的,而对象没有次序,变量必须与属性同名才能取到正确的值
对象的解构也可以指定默认值,默认值生效的条件是,对象的属性严格的等于undefined
如果解构失败,变量的值就等于undefined
如果解构的模式是嵌套的对象,而且子对象所在的父属性不存在,则会报错
不会复制继承自原对象的属性
(二)字符串的解构赋值
字符串解构赋值时字符串被转换成了一个类似于数组的对象(类似于数组的对象还有一个length属性,也可对其赋值)
三)数值和布尔的解构赋值
解构赋值时,如果等号右边是数值或者布尔值,则会先转换成为对象,在进行赋值
解构的规则:只要等号的右边不是对象或者数组,都会先将其转换成对象(注:undefined和null无法转换成对象,对其进行赋值时都会报错)