在了解ES6新增方法之前要先知道代码块是什么
代码块就是一个大括号括起来的部分,比如:{ }、if(){ }、for(){ }
1、let命令
let可以先声明再赋值,但不能先声明再访问,不能声明相同的变量名
let a
a=10
console.log(a) //10
console.log(b)
let b=9
let c=12
let c=19
console.log(c)
let只在代码块内有效
{
let a=10;
console.log(a) //10
}
console.log(a) //Uncaught ReferenceError: a is not defined
let与for循环计时器很适用
for(var i=0;i<10;i++){
setTimeout(function(){
console.log(i) //0 1 2 3 4 5 6 7 8 9
},1000)
console.log(i) //10个10
}
for(let j=0;j<10;j++){
setTimeout(function(){
console.log(j) //0 1 2 3 4 5 6 7 8 9
},1000)
console.log(j) //0 1 2 3 4 5 6 7 8 9
}
//这是由于let只在代码块内有效,因此每循环一次就会保留循环得到的数据
2、const命令
const 声明一个只读变量,声明之后不允许改变,意味着,一旦声明必须初始化,否则会报错,其他的与let类似
const a="hello";
console.log(a) //hello
const b;
b=10;
console.log(b) //Uncaught SyntaxError: Missing initializer in const declaration
暂时性死区
var i="world";
if(true){
console.log(i) //Uncaught ReferenceError: Cannot access 'i' before initialization
const i=19;
}
ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 i之前使用它会报错。
3、解构赋值
解构赋值是对赋值运算符的扩展。是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值的方法。在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段获取。
解构模型
解构的源,解构赋值表达式的右边部分。
解构的目标,解构赋值表达式的左边部分。
数组模型的解构:
//基本类型
let [a,b,c]=[1,2,3]
console.log(a,b,c) ///1,2,3
//嵌套
let [a,[[b],c]]=[1,[[2],3]]
console.log(a,b,c) //1,2,3
//可忽略
let [a,,b]=[1,2,3]
console.log(a,b) //1,3
//不完全解构
let [a,b=1]=[]
console.log(a,b) //undefined,1
//字符串
let [a,b,c]="hao"
console.log(a,b,c) ///h,a,o
//解构默认值
let [a=10,b]=[undefined]
console.log(a,b) //10,undefined
let [a=1,b=a]=[]
console.log(a,b) //1,1
let [a=1,b]=[3]
console.log(a,b) //3,undefined
let [a=1,b=a]=[4,5]
console.log(a,b) //4,5
//当解构模式有匹配结果,且匹配结果是 undefined 时,会触发默认值作为返回结果。
对象模型的解构
//基本
let {name,age}={"aaa",19}
console.log(name,age) //19,aaa
let {name:age}={name:19}
console.log(age,name) //19 ''
//可嵌套可忽略
let obj={a:["aaa",{az:"bbb"}]}
let {a:[x,{az}]}=obj
console.log(x,az) //aaa,bbb
let obj={a:["aaa","sss",{name:"Li"}]}
let {a:[x,,{name}]}=obj
console.log(x,name) //aaa,Li
//不完全解构
let obj={a:["aaa",{age:18}]}
let {a:[x,{age},y]}=obj
console.log(x,y,age) //aaa,undefined,18
//解构默认值
let {a=10,b=9}={a:19}
console.log(a,b) //19,9
let {i:a="hello",p:b=10}={p:"world"}
console.log(a,b) //hello,world