本篇文章摘自阮一峰著作《es6标准入门》的部分笔记,本人加以整理和解读
1.解构赋值
es6允许按照一定的模式,可以从数组和对象中提取值
数组解构
let [a,b,c] = [1,2,3] //分别赋值给abc为123
let [ foo,[ [bar] , baz ] ] = [ 1, [ [ 2 ], 3 ] ] //foo bar baz = 1 2 3
对于数组来说,两边的模式要相同
过滤掉一部分
let [,,a] = [1,2,3]
console.log(a) //3
let [a,,,...b] = [1,2,3,4,5,6,7,8,9]
console.log(a,b) // 1 [4,5,6,7,8]
不完全结构
let [a,[b,c],d] = [1,[2],3]
console.log(a,b,c,d) // 1 2 undefined 3
let [a,[b],c] = [1,[2,3],4]
console.log(a,b,c) // 1 2 4
默认值
如果带了默认值,在结构的结果为undefined的时候,就会以默认值为值,如下例子
let [ x = 1 ] = [5] //x=5
let [x=2] = [] //x=2
let [x=2] = [undefined] //x=2
对象解构
let {foo,bar} = {foo:1,bar:2} //foo 1 bar 2
更改名字使用:
let {foo:baz,bar} = {foo:1,bar:2}
baz // 1 foo是模式匹配,baz才是真正的变量
let node = {
loc:{
start:{
line:1,
colum:5
}
}
}
let {loc,loc:{start},loc:{start:{line}}} = node
console.log(loc,start,line) //start{...} {line:1,colum:5} 1
Iterator
遍历器,主要是对数组 对象 map set进行遍历
任何数据类型,只要部署了 iterator 接口,都可以遍历
iterator工作过程
1.创建一个指针对象,指向当前数据结构的起始位置
2.第一次调用对象指针的next 方法,可以将指针指向数据的第一个成员
3.第二次调用对象指针的next方法,就指向第二个成员
4.不断调用next方法,直到指向最后一个成员
例如:
let str = 'abcdeftghjkl'
let iter = str[Symbol.iterator]()
// console.log(iter.next()) a
使用 for of 一次性循环遍历
for(let i of str){
console.log(i)
}
一个数据结构,只要部署了Symbol.iterator属性,就被视为有iterator接口,就可以使用 for of 来循环遍历他的成员
let obj = {
[Symbol.iterator]:function(){
return {
next(){
}
}
}
}
如上,对象默认是没有iterator接口的,要想用,那就得给对象配置一个[Symbol.iterator]接口