如果我创建了一个数组,例如,var array=[1,2,3,4];
来返回一个迭代器,我会做 var iterator = array[Symbol.iterator ]();
不明白为什么要通过括号访问Symbol.iterator属性?为什么不只是 array.Symbol.iterator
?
最佳答案
名为 Symbol
的数组没有属性(除非你把一个放在那里)。相反,您正在查找其键是 Symbol.iterator
指向的符号原语的值。 Symbol.iterator
返回一个符号,您使用该符号作为查找键。这有点像查找带有变量的属性:
let a = [1, 2, 3]
a.someProp = "hello"
let key = "someProp"
// this doesn't work for the same reason s.Symbol.iterator doesn't:
// a.key
// but this does:
console.log(a[key])
// So with a Symbol:
let k = Symbol.iterator
console.log(typeof k)
// k is now a reference to the symbol that is the key
// you can use that to returns the iterator function
console.log(a[k]) // <-- that returns your iterator function
console.log([...a[k]()])
// equivalent to:
console.log([...a[Symbol.iterator]()])
关于javascript - 为什么要通过括号访问 Symbol.iterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51489239/