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