ES6(1)

99 阅读3分钟

1.let

一、(let 和 var 区别):

  1. let关键字声明的变量不可以重复声明,会报错
  2. let关键字声明的变量不存在变量提升的问题,会报错
  3. 在块级作用域内通过let关键字声明的变量,在定义的作用域外部获取不到对应的变量
  4. 暂时性死区(当前作用域内不允许同名的变量进来)
    在块级作用域内let声明的变量会形成一个封闭性的死区,只能在声明之后调用,否则会报错

二、作用域:

  1. 全局作用域
  2. 局部作用域(函数作用域)
  3. 块级作用域(通过let声明的变量 在{}内部属于块级作用域)

2.const

  1. const关键字声明的变量不可以重复声明,会报错
  2. const关键字声明的变量不存在变量提升的问题,会报错
  3. 在块级作用域内通过const关键字声明的变量,在定义的作用域外部获取不到对应的变量
  4. 暂时性死区(当前作用域内不允许同名的变量进来)
    在块级作用域内const声明的变量会形成一个封闭性的死区,只能在声明之后调用,否则会报错
  5. const 关键字定义的是一个常量,并且是只读 赋值之后不允许修改
  6. const定义的变量在声明的时候就必须赋值
  7. const 关键字定义基本类型数据时,存的是值,值不可更改
    const 关键字定义引用类型数据时,存的是地址,地址不可更改,内容可更改
  8. 冻结 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来获取参数