一.补充知识
(1).result运算符对象拓展
普通方式
var obj = {
a: 1,
b: 2,
c: 3
}
var obj1 = {
a: 4,
d: 5,
e: 6
}
var obj2 = {
}
Object.assign(obj2, obj, obj1);
log(obj2)
{
a:4
b:2
c:3
d:5
e:6
}
es7
展开
var obj2 = {
...obj
...obj1
}
结果与上方一致
当系统用的instanceof的时候 系统实际调用的是symbol下的这些函数,其他symbol中内置的函数都是一样的,知道有这么一回事就行,其实就是检测用户的调用动作
foo instanceof Foo
Foo[Symbol.hasInstance](foo)
二.迭代器
(1).基础
let arr = [1, 2, 3, 4]
log(arr); //[1,2,3,4]
let iter = arr[Symbol.iterator]
log(iter)//f values{[native code]}
let iter = arr[Symbol.iterator]()
log(iter)//Array Iterator{
_proto__: Array Iterator
next: f next()
}
log(iter.next()); {value: 1, done: false}
log(iter.next()); {value: 1, done: false}
log(iter.next()); {value: 2, done: false}
log(iter.next()); {value: 3, done: false}
log(iter.next()); {value: 4, done: false}
log(iter.next()); {value: undefined, done: true}
总结:对数据解构读取的一种方式,有序的,连续的,基于拉取的一种消耗数据的组织方式
(2).数据解构
function makIterator(array){
var nextIndex = 0;
return {
next: function(){
return nextIndex < array.length ?
{value: array[nextIndex++], done:false}:
{value: undefined,done:true}
}
}
}
var iter = makeIterator([1,2,3,4]);
log(iter.next());{value: 1, done: false}
log(iter.next());{value: 2, done: false}
log(iter.next());{value: 3, done: false}
log(iter.next());{value: 4, done: false}
log(iter.next());{value: undefined, done: true}
上面的那些除了typearray都是类数组,而这个是类型数组
log(TypeArray);//报错找不到
const tArray = new Int8
log(tArray)
[
0:0
...
7;0
]
赋值
tArray[0] = 100;
log(tArray);
[
0:100
...
7:0
]
只要部署了iterator这个接口的全部都可以通过forof来进行迭代
let arr = [1, 2, 3, 4]
fo(let i of arr){
log(i)
}
//1234
let obj = {
start:[1, 3, 2, 4],
end:[5,7,6],
[Symbol.iterator](){
let index= 0,
arr = [...this.start,...this.end],
len = arr.length
return{
next(){
if(index<len){
return{
value: arr[index++],
done: false
}
}else{
retrun{
value: undefined,
done: true
}
}
}
}
}
}
for(var a of obj){
log(a)
}
1324576
调用执行
var iter = obj[Symbol.iterator]();
log(iter.next())
log(iter.next())
很少会出现两者同时调用,如果同时调用两者互不影响,并不是拉取完了就不能for了
如果没有迭代器接口是无法展开的
log([...obj])//报错
如果有迭代器接口
log([...obj])//1324576