七、ES6相关

66 阅读2分钟

ES6相关

1、let、const、var的区别

  • 首先是作用域,let、const是块级作用域,var是全局作用域。解决了变量污染
  • const不可修改(当里面是引用数据类型,只能保证指针不可改变),不可重写。let不可重写。
  • var后的变量会添加到全局属性上,其它两个不会。
  • let、const会存在暂时性死驱的情况,因为这两个没有变量提升,只有var存在。
  • const需要声明初始值,其它两个不需要。

2、如果new一个箭头函数的会怎么样

  • 不可以new一个箭头函数,会报错,因为箭头函数中没有自己的原型,没有自己的this所以不能new。

3、箭头函数与普通函数的区别

  • 书写简洁:箭头函数如果只有一个参数,可以省略();如果函数体只有一句返回,可以省略{};如果只有一句函数体没有返回值,可以用void+函数体代替{}。
  • this指向:普通函数存在this指向,如果作为属性来使用,this指向所在对象;如果作为方法使用,this指向全局。而箭头函数没有自己的this,他的this是所在位置的外层this
  • 构造函数:箭头函数不可以作为构造函数,只有普通函数可以。
  • arguments:箭头函数没有arguments,普通函数有。
  • prototype:箭头函数没有,普通函数有。
  • this指向:箭头函数的this指向不可更改,call,apply,bind,对它使用会报错。

4、扩展运算符的作用及使用场景

  • 复制合并对象:遍历循环可拷贝的属性,复制到新的对象中。如果有相同属性值,后面的会覆盖前面的。
let obj =  {
    name:"aaa",
    age:15
}
const obj1 = {qq:1,...obj}//{ qq: 1, name: 'aaa', age: 15 }
  • 复制合并数组:可以将数组复制给一个新的数组,如果有相同元素,重复展示不会覆盖
  • 将数组转化为arguments:在函数参数值处使用...将数组展开,可以转化为arguments参数传入。
  • 将字符串转化为数组:对一个字符串使用...,可以将其每个字符转为元素,形成一个新的数组。
let arr2 = [...string]//[ 'c', 'c', 'c' ]

5、rest参数

... 用在函数的形参上,可以将传入的参数转化为类数组,这个方法用于不知道参数个数的情况下和想要剩余参数的情况。

let aaa=function(...aa) {
  console.log(aa)
}

6、模板字符串

  • es6新提出模板字符串,它其中可以包含格式,普通字符,变量。变量需要用 ${} 包裹。
  • 模板字符串中有 include、startsWith、endsWith、repeat 方法。
let ww = `我在${bb}`
console.log(ww.includes('在'))//true
console.log(ww.startsWith('ni'))//false
console.log(ww.endsWith('c'))//true
console.log(ww.repeat(3))//我在cc我在cc我在cc