1.let命令:

相当于var,声明的变量只在所在的代码块内有效,eg:

{

 let a = 1;

var b =2;

console.log(a)  //1

}

console.log(a) //not defined

console.log(b) //2

let变量在域解析的时候不会被提升,eg:

console.log(a)  //undefined

var a = 1;

 

console.log(b)  //not defined报错

let b = 2;

 

let不允许在同一个作用域下申明已经存在的变量

 

 

2.const同let

只是const还有2条特殊的特点:

const申明的时候必须赋值

const申明的数据类型是基本数据类型的时候,它的值是不可变的,如果存储的是对象,那么引用不可以被改变,数据变化是不影响的。

 

3.变量的解构赋值:本质上是匹配模式,等号两边的模式相同,那么左边的变量就可以被赋予对应的值。eg:

let a = 1;

let b = 2;

let c = 3;

let [a,b,c]=[1,2,3]

 

数组的解构赋值,eg:

let [a,[[b],c]] = [1,[2],3]  

console.log(a,b,c) //1 2 3

 

let [, ,c] = [1,2,3]

console.log(c) //3

 

let [a] = [];  // let a;

console.log(a); //undefined

 

let [y=1] = [];

console.log(y);  //1

 

对象的解构赋值:

let {a,b} = {b:bbb",a:aaa"}

console.log(a,b) // aaa bbb

 

let {a:b} = {a=1};

console.log(b);  //1

console.log(a);  //not defined 

 

基本类型的解构赋值:eg:

字符串的解构赋值:

let {a,b,c,d}={1,2,3,4};

console.log(a,b,c,d);  //1 2 3 4 (字符串被转换为类数组对象)

属性的解构赋值:

let {length:len} = {'miaov'};

console.log(len);  //5

还可以对数值和布尔值解构赋值

null和undefined不可以解构赋值

 

set数据结构:唯一的值

set数组去重:

 

var arr = [1,2,2,3,4]
var set = new Set(arr)  //{1,2,3,4}
var newArr = Array.from(set)
console.log(newArr)  //[1,2,3,4]