ES6
一、let,const的区别是什么?
1.let:只在块级作用域内有效, 暂时性死区
{
let a = 10
}
变量的声明不能提升
var a = 10 ==> var a
a=10
let a = 10
var test = function(){
}
function test(){
整体提升
}
变量不可以重复声明
let a = 10
a = 20
2.const
只在代码块内有效
存在暂时性死区
声明不能提升
不可以重复声明
声明的是常量,不可改变常量的值
声明的同时必须初始化
const a
a = 10
const a = 10
a = 20
二、解构
解构
可以把对象或者是数组中的值,拿出来赋值给变量
let [a,b,c] = [1,2,3]
a=1
b=2
c=3
等式两边如果模式相同的话,那么左右是一一匹配的关系
等式两边如果模式不相同的话,右数据多于左
解构失败
let [a,b,c,d] = [1,2,3]
d=undefined
等式两边如果模式不相同的话,左数据多于右
let [a,b,c] = [1,2,3,4,5]
c = 3
let [a,b,...c] = [1,2,3,4,5]
c = [3,4,5]
默认值
改变该变量的值,那么生效的是改变之后的值
没改变变量的值/undefined,那么生效的就是默认值
let [a=10,b,c=12]=[1,2]
a=1
b=2
c=12
数组的解构
let [a,b,c] = [1,2,3,4,5]
c = 3
let [a,b,...c] = [1,2,3,4,5]
c = [3,4,5]
let [a,b,{name}] = [1,'hello',{name:tom}]
a = 1
b = hello
name = tom
let [a,b,[c,d]] = [1,2,[3]]
a = 1
b = 2
c = 3
d = undefined
对象的解构
let obj = {
name:'tom',
age:12
}
let {name:username,age:userage} = obj
username
userage
let {name:name,age:age}
简写
let {name,age} = obj
字符串的解构
是可迭代的
把字符串转换成类数组的形式
let [a,b,c,d] = '1234'
a = 1
b =2
c = 3
d = 4
数值和布尔值
不可迭代
let [a,b,c]= true
let [a,b,c]= 123
解构原型上的方法
let {toString} = true
toString == Boolean.prototype.toString
let {trim} = '123'
原型链 继承!!!!!
类
函数的解构
function test([a,b]){
}
test([1,2])