1.let和const命令
let、const、var的区别
var
变量有提升, 没有块级作用域, 可以重复声明
let
没有变量提升, 有块级作用域, 不能重复声明,
暂时性死区: 在代码块内,使用let命令声明变量之前,该变量都是不可用的 称为暂时性死区
const
没有变量提升, 声明常量,一旦定义,值不能再改变, 有块级作用域
2.解构赋值
数组解构
let [a,b,[aa,bb,cc]] = [1,2,['aaa','bbb','ccc']]
console.log(a,b) // 1,2
如果解构不成功,变量的值是undefined 解构赋值允许指定默认值
let [qq = true] = []
console.log(qq) //true
对象解构
const {
name,
age,
colors:
{ col1, colnum }
} = {
name: 'zs',
age: 18,
colors:
{ col1: 'red', colnum: 10 }
}
console.log(name, age, col1, colnum);//zs 18 red 10
// 对象的解构也可以指定默认值。
var {x=1} = {}
console.log(x); //1
var {x,y = 5} = {x:1}
console.log(x,y); //1,5
// 构造函数解构
function fn(obj) {
console.log(obj); //{name: 'aa', age: 20}
}
var obj = { name: 'aa', age: 20 }
fn(obj)
// 字符串的解构赋值
const [a,b,c,d,e] = 'hello'
console.log(a,b,c,d,e); //h e l l o
3.Set
ES6提供了新的数据解构Set。类似于数组,但是成员的值都是唯一的,没有重复的值。 Set本身是一个构造函数,用来生成Set数据结构
添加
`
var myset = new Set()
// 添加成员
myset.add(1)
myset.add(2)
myset.add(2)
// 长度 没有重复的值
console.log(myset.size) //2
` 删除
// 删除某个值,返回一个布尔值,表示删除是否成功。
myset.delete(1) //删除
var a = new Set()
a.add(100)
a.add(200)
console.log(a.delete(200)); //true
查找
// 判断是否有这个成员
// 返回一个布尔值,表示该值是否为Set的成员。
console.log(myset.has(1)) //false
var ee = a.has(300)
console.log(ee); //false
清除
// clear() 清除所有成员,没有返回值
var tt = a.clear()
console.log(tt); //undefined
Set函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化
去重
// 去重
var s = new Set([1, 2, 3, 4, 5, 4, 4])
console.log([...s]) //[1,2,3,4,5]
//去除字符串里面的重复字符。
console.log([...new Set('ababbc')].join('')) //abc
var str = 'ababcabcabcde'
var kk = [...new Set(str)].join('')
console.log(kk); //abcde
遍历
var ss = new Set(['aaa', 'bbb', 'ccc', 'ddd'])
// 返回键名的遍历器
for (let key of ss.keys()) {
console.log(key)
}
// 返回键值的遍历器
for (let key of ss.values()) {
console.log(key)
}
// 返回键值对的遍历器
for (let key of ss.entries()) {
console.log(key) // ['aaa', 'aaa']
}
// 使用回调函数遍历每个成员
ss.forEach((key, value) => {
console.log(key, value)
})