ES6的新特性

883 阅读3分钟

一、 let 和const

1.1、ES5中声明变量var的缺陷

console.log(num)//undefind
var num=10
console.log(num)//10

var的特点(缺陷)

  • 1、预解析:js代码从上往下解析之前,会先对变量声明进行提升(预解析),因为这个特点,同时还可以重复声明变量,同时变量还可以先使用后定义
  • 2、没有块级作用域:首先要明白一点在if和for语句大括号里面声明的变量是局部变量,也叫块级变量,但是呢用var声明的变量就没有这个概念,用var在if和for声明的变量都会变成全局变量

1.2、ES6 let和const的特点

let的特点

  • 1、let的特点:没有预解析,变量不允许重复声明,变量必须先定义后使用。
  • 2、有块级作用域,在if和for申明的变量,只能在if和for的大括号中使用。 const的特点
  • 1 他是用来定义常量,只能在声明的时候赋值一次,后面就不允许了,同时用const定义的常量是不允许修改的。

1.3 、let与const区别

二、 解构赋值(变量的简写语法)

1、对象的解构赋值

1.1:取出对象的属性赋值给变量

语法格式 let{属性名}=对象名

 <script>
        let obj={
            name:'张三',
            age:18,
            sex:'男'
        }
        // ES5的写法
        // let name=obj.name
        // let age=obj.age
        // let sex=obj.sex
        // console.log(name,age,sex);
        // ES6的解构赋值简写
        // 他的原理就是就是ES5的赋值的简写
        let {name,age,sex}=obj
        console.log(name,age,sex)
    </script>

1.2、取出变量的值赋值给对象的属性

注意点

  •   使用解构赋值前提是属性名跟变量名保持一致,如果属性跟变量不一致,就不能用解构赋值
    
  •  如果解构的属性没有那个属性,就会使用默认属性
    
  •   解构赋值重新命名的话就用:例如let  obj1={name,age:ageAder,sex}
    
let   name='张三'
let   age=18
let    sex='女'
// ES5的写法
let obj={
    name:name,
    age:age,
    sex:sex
} 
console.log(obj);
  // ES6的解构赋值语法
 // 使用解构赋值前提是属性名跟变量名保持一致,不然属性不一致,就不能用解构赋值
let  obj1={name,age,sex}
console.log(obj1);

2、数组的解构赋值

 <script>
        // ES5的取出数组的元素赋值给变量
        let arr =[10,20,30,40]
        let n1=arr[0]
        let n2=arr[1]
        let n3=arr[2]
        let n4=arr[3]
        console.log(n1,n2,n3,n4);
        //ES6取出数组的元素并赋值
        let arr1=[m1,m2,m3,m4]=arr

        // 取出变量的值,赋值给数组的元素
        let num1=66
        let num2=88
        let num3=100
        let num4=99
    
        let arr2=[num1,num2,num3,num4]
    </script>

小案例

  <script>
        // 解构赋值的案例
        function fn({username,password}){
            console.log(username,password);
        //     let obj1= {username,password}=obj
        //     console.log(obj1);
        //   console.log(obj);
        }
       fn({username:'adim',password:'123456'}) 
    </script>

三、箭头函数

什么是箭头函数:可以理解为他是function的简写

箭头函数的特点:

  • 把function单词替换成=>
  • 形参的扩号()移动到箭头函数的左边
  • 如果箭头函数只有一个形参,可以省略形参的小括号
  • 如果箭头函数的函数只有一行代码,可以省略大括号,同时有return也要省略
  • 箭头函数不能完全替代function,箭头函数与function函数唯一的区别就是this执行的不同
  • 箭头函数this指向:箭头函数没有this
  • 箭头函数中使用this,会访问上级作用this
  • 原因:箭头函数没有this,因为作用域链的关系,就会往上级作用域查找this
  fn1=()=>{

        }

补充:普通function函数this执行三种情况

  • this:谁调用我,我就指向谁
  • 普通函数,this执行window
  • 对象方法, this指向对象
  • 构造函数, this指向实例对象

四、解构赋值"..."

相当于遍历对象简写,拿到里面的每一项的值。

  // 相当于遍历对象简写,拿到里面的每一项的值。
       let arr1=[10,20,30,40,50]
       let arr2=[60,70,80,90,100] 
       arr1.push(...arr2)
       console.log(arr1);

四、数据类型Set(数组去重)

概念:数据类型Set(集合):类似于数组,与数组唯一的区别是:不能存储重复的元素

   // 数据类型set(集合):类似于数组,与数组唯一的区别是:不能存储重复的元素
      let arr =[10,20,10,40,60,20,10,40,50]  
    //   声明set
    let set=  new  Set(arr)
      console.log(set,"利用set去重后的数据");
      let arr2=Array.from(set)
      console.log(arr2,"把set去重后的数组转为真数组");

image.png