1.let
一、(let 和 var 区别):
- let关键字声明的变量不可以重复声明,会报错
- let关键字声明的变量不存在变量提升的问题,会报错
- 在块级作用域内通过let关键字声明的变量,在定义的作用域外部获取不到对应的变量
- 暂时性死区(当前作用域内不允许同名的变量进来)
在块级作用域内let声明的变量会形成一个封闭性的死区,只能在声明之后调用,否则会报错
二、作用域:
- 全局作用域
- 局部作用域(函数作用域)
- 块级作用域(通过let声明的变量 在{}内部属于块级作用域)
2.const
- const关键字声明的变量不可以重复声明,会报错
- const关键字声明的变量不存在变量提升的问题,会报错
- 在块级作用域内通过const关键字声明的变量,在定义的作用域外部获取不到对应的变量
- 暂时性死区(当前作用域内不允许同名的变量进来)
在块级作用域内const声明的变量会形成一个封闭性的死区,只能在声明之后调用,否则会报错 - const 关键字定义的是一个常量,并且是只读 赋值之后不允许修改
- const定义的变量在声明的时候就必须赋值
- const 关键字定义基本类型数据时,存的是值,值不可更改
const 关键字定义引用类型数据时,存的是地址,地址不可更改,内容可更改 - 冻结 Object.freeze()冻结了之后 内容修改就不生效
3.解构赋值
数组(从左向右依次赋值):
let [a,b,c,d] = [1,2,3];
console.log(a,b,c,d); // 1 2 3 undefined
let [,b,,d] = [1,2,3,4];
console.log(b,d); // 2, 4
对象(按照对象里的key(属性名解构))
let obj1 = {
name: 'zs',
age: 18,
}
let {age,name} = obj1;
console.log(age, name); //18 zs
let {x,y} = obj1
console.log(x, y) //undefined undefined
起别名 key:别名
let {age:m, name:n} = obj1
console.log(m, n) // 18 zs
函数 (没有形参的情况下 可以通过arguments来获取参数)
function fun([x,y = 99,z = 100]) {
console.log(x, y, z)
}
fun([1,2, null])//1,2,null
fun([1,2])//1,2,100
没有形参的情况下 可以通过arguments来获取参数
function fn1() {
console.log(arguments)
}
fn1([3,4,5])//[3,4, 5]
fn1(2,3,4)//2, 3, 4
4. 扩展运算符
1.数组的复制(数组的深拷贝)/ 对象的复制(对象的深拷贝)
let a1 = [1,2,3];
let a2 = [...a1];
console.log(a2); // [1,2,3]
a2[1] = 4; <------(更改a2,a1不变)
console.log(a1); // [1,2,3]
console.log(a2); // [1,4,3]
let obj1 = {
age: 18,
name: 'zs'
}
let obj2 = {...obj1};
console.log(obj2.age, obj2.name) //18 zs
obj2.age = 28; <------(更改obj2,obj1不变)
console.log(obj1.age) // 18
2.数组中的一部分/ 对象的一部分
let a3 = [3,4,...a1];
console.log(a3); // [3,4,1,2,3]
let obj1 = {
age: 18,
name: 'zs'
}
let obj3 = {
height: '170cm',
weight: '123kg',
age: 28
}
let obj4 = {...obj1,obj3}
obj4 = {
age: 18,
name: 'zs',
obj3: {
height: '170cm',
weight: '123kg',
age: 28
}
}
3.数组的合并/ 对象的合并(相同属性 后面会覆盖前面)
let a4 = [1,'b']
let a5 = [2,3,'aaa']
let a6 = [...a4,...a5]
console.log(a6) // [1,'b',2,3,'aaa']
let obj1 = {
age: 18,
name: 'zs'
}
let obj3 = {
height: '170cm',
weight: '123kg',
age: 28
}
let obj4 = {...obj1,...obj3}
obj4 = {
name: 'zs',
height: '170cm',
weight: '123kg',
age: 28 <------(将前面的重复属性覆盖)
}
4.可以将类数组转换成数组(arrry from也可)
类数组(ali):只有长度 不能通过.push等方法添加或删除内容
...ali<------数组
5.rest 剩余的参数
function fun(x,y,...rest) {
console.log(x,y) // 1 2
console.log(...rest) // 3 4 5
}
fun(1,2,3,4,5)
没有形参的情况下 可以通过arguments来获取参数