1、let
键字用来声明变量,使用 let 声明的变量有几个特点:
1) 不允许重复声明
2) 块儿级作用域
3) 不存在变量提升
4) 不影响作用域链
5) 暂时性死区
6)不与顶级对象挂钩
在代码块内,使⽤let命令声明变量之前,该变量都是不可⽤的。 这在语法上,称为“暂时性死区”。
该变量在声 明之前使⽤都属于“暂时性死区“。
2、const
const 关键字用来声明常量,const 声明有以下特点
1) 声明必须赋初始值
2) 标识符一般为大写(建议)
3) 不允许重复声明
4) 值不允许修改
const实际上保证的,并不是变量的值不得改动,⽽是变量指向的那个内存地址所保存的数据不得
改动。对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此 等同于常量。
但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是⼀个指向实际数
据的指针,const只能保证这个指针是固定的(即总是指向另⼀个固定的地址),⾄于它指向的数据结 构是不是可变的,就完全不能控制了。
注意: 对象属性修改和数组元素变化不会出发 const 错误, 对象地址不可改变。
5) 块儿级作用域
6)、 不与顶层对象挂钩
应用场景:声明对象类型使用 const,非对象类型声明选择 let
3、let和const总结
1. let 声明的变量会产⽣块作⽤域,var 不会产⽣块作⽤域
2. const 声明的常量也会产⽣块作⽤域
3. 不同代码块之间的变量⽆法互相访问
4. 注意: 对象属性修改和数组元素变化不会出发 const 错误 (数组和对象存的是引⽤地址)
5. 应⽤场景:声明对象类型使⽤ const,⾮对象类型声明选择 let
6. cosnt声明必须赋初始值,标识符⼀般为⼤写,值不允许修改。
4、变量的解构赋值
ES6 允许按照一定模式,从数组和对象中快速的提取成员,对变量进行赋值,这被称为解构赋值。 本质上,只要等号两边的模式相同,左边的变量就会被赋予对应的值。
1>解构分类
1)、数组的解构
1 <script>
2 //数组的解构
3 const F4 = ['⼩沈阳','刘能','赵四','宋⼩宝'];
4 let [xiao, liu, zhao, song] = F4;
5 console.log(xiao);
6 console.log(liu);
7 console.log(zhao);
8 console.log(song);
9 // 省略变量
10 let [a, , c] = [1, 2, 3];
11 console.log(a, c);//1,312 </script>
13
2)、对象的解构
1 <script>
2 //对象的解构
3 const zhao = {
4 name: "赵本⼭",
5 age: "不详",
6 xiaopin: function () {
7 console.log("我可以演⼩品");
8 },
9 data: {
10 list: ["贾玲", "沈腾", "···"],
11 },
12 };
13
14 let {
15 name:n,//起别名
16 age=18,//可以定义默认值
17 xiaopin,
18 data: { list },//可以解构下⼀级数据
19 } = zhao;
20 console.log(n);//赵本⼭
21 console.log(age);
22 console.log(xiaopin);
23 console.log(list);
24 xiaopin();
25
26 let {xiaopin} = zhao;
27 xiaopin();
28 </script>