ES6
-
let、var 、const的区别
var let const 块级作用域 无块级作用域 有块级作用域 有块级作用域 变量提升 有变量提升 无变量提升 无变量提升 暂时性死区 无暂时性死区 有暂时性死区 有暂时性死区 值不可更改 值可更改 值可更改 值不可更改 重复声明 能重复声明 不能重复声明 不能重复声明 声明后必须赋值 否 否 是 复杂数据类型 可以更改 可以更改 常量值对应的内存地址不可更改
可以更改内部的值,但不可以重新赋值
传值赋值和传址赋值-
如果你存储的值不需要变化尽量使用const关键字,比如函数的定义,pi值,或者数学公式中一些恒定不变的值,
因为使用const关键字声明的常量值不能变化,js解析引擎不需要时刻监控值得变化,所以效率高
-
-
ES5、ES6是什么,有什么区别?
- ES5泛指上一代语言标准。ES6泛指下一代JS语言标准,包含ES2015、ES2016、ES2017、ES2018等。
-
ES5、ES6时间分界线是那一年?
- 2015年
-
babel是什么,有什么作用,在webpack中怎么使用?
- Babel是一个JavaScript编译器,可以将ES6代码转为ES5代码,使在目前不支持ES6浏览器上执行ES6代码。
-
const声明的变量一定不能修改吗?
-
const实际上保证的并不是变量的值不得改动,而是变量指向的那个内存地址不得改动。
对于基本类型的数据(Undefined、Null、Boolean、Number、String和Symbol〉而言,值就保存在变量指向的内存地址中,因 此等同于常量。
但对于引用类型的数据(主要是对象和数组)而言,变量指向的内存地址,其保存的只是个指针,指针指向堆内存中的数据。
const只能保证这个指针是固定的,至于它指向的数据是可以被修改的。
-
const foo = {}; //为foo加一个属性,可以成功 foo.prop = 123; //将foo指向另一个对象,就会报错 foo = { prop : 123 }; //TypeError fo is read-only
-
-
什么是块级作用域
- 是一个语句,将多个操作封装在一起,通常是放在一个大括号里,没有返回值
-
解构赋值
-
解构代表分解数据结构,赋值代表为变量赋值
-
允许按照一一对应的方式,从数组或者对象中提取值,再赋值给变量
-
数组解构
- 左边的中括号不是数组,代表数组解构
- 嵌套解构赋值
- 不完全解构,解构不成功,变量的值为undefined
- 允许左侧的解构变量设置默认值,但会被右边的值覆盖
-
对象解构
- 左边的中括号不是对象,代表对象解构
- 左侧解构的变量名字匹配右侧对象的属性
- 另一种写法,左侧解构的属性匹配右侧对象的属性,然后赋值给变量
-
字符串结构赋值
let [a, b, c, d] = 'test'; console.log(a)//t console.log(b)//e console.log(c)//s console.log(d)//t let { length } = 'test'; console.log(length)//4
-
-
箭头函数
- 语法 ()=>{}
- const fn= ()=>{},如何调用呢?将箭头函数赋值给一个变量,变量名字就是函数名字,通过变量名字调用函数即可
- 函数体中只有一句代码,且单吗的执行结果就是返回值,可以省略大括号
- 如果形参只有一个,可以省略小括号
- 箭头函数不绑定this,箭头函数中的this,指向的是 函数定义位置的上下文中的this