全面取代varjavascript
大概类似于C++的定义,一个变量必须得先定义后使用,没有预编译java
注意let的做用域,一个{}就是一个做用域,上述规则须在一个做用于内es6
坑:for(let i =0;i < 10; i++){json
let i=20;数组
}spa
这个例子存在父子做用域,即(){}各为一个做用域,因此i能够重复letcode
即静态变量值不容许改变,经常使用于声明为一个常量对象
坑:let arr=new array(1,2,3);token
arr.push(4);//arr:1,2,3,4ip
由于数组为引用,引用的地址不能改变,但地址映射的数组内的值能够改变
要想彻底不变则使用:object.freeze();
es6最强大的功能之一,简而言之即左边的结构与右边的结构进行匹配,若是匹配成功则赋值给z左边
eg:
let a = 10,b = 20;
let [c,d] = [b,a];//c = 20,d = 10
//当作左边的与右边的不匹配则为undifine
let [e,f,g] =[b,a]//e=20,f=10,g:undefine
//左边可设默认值,当左边与右边的不匹配时使用默认值
let [h, i,j=100] = [b,a]//h=20,i=10,j=100
//对象赋值,同上,但可取别名,注意对象进行模式匹配时是按照键名进行匹配,不是循序匹配
let json = {
name:"zjj",
age:"20",
sex:"man"
};
let [name,aaaaa,age:Age]=json;//name="zjj" ,aaaaa = undifune, Age = "20"
坑:
1.解构时null视为一个正常值,当右边为null时左边匹配的默认值不会生效,只有当右边彻底等于(===)undifine时默认值才会生效
2.解构时的默认值为惰性的,只有使用的才会求值
function f() { console.log('aaa'); }
let [x = f()] = [1];//不会打印出aaa
3.解构时右边的值必须为能够遍历的结构,例如数组,对象,set,map等,let [demo] = 10;//ERROR
4.
let x;
{x} = {x: 1};
上面代码的写法会报错,由于 JavaScript 引擎会将{x}
理解成一个代码块,从而发生语法错误。只有不将大括号写在行首,避免 JavaScript 将其解释为代码块,才能解决这个问题。改成
let x;
({x} = {x: 1});
上面代码将整个解构赋值语句,放在一个圆括号里面,就能够正确执行
let name = "zjj",age = 15;
let str=`名字为:${name},年龄:${age}`;//str="名字为:zjj,年龄:15"
字符串使用`,拼接的内容使用${...}的形式