javascript - 为什么要通过括号访问 Symbol.iterator?

标签 javascript arrays iterator symbols

如果我创建了一个数组,例如,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/

相关文章:

c - 如何更改字符串数组中的字符?

java - 遍历数组列表 - java

javascript - jQuery:我需要在 $(document).ready() 中调用 $ ("img".lazyload() 吗?

javascript - Protractor 已弃用 getLocationAbsUr

javascript - 如何在 jQuery 中迭代 HashMap 列表

c# - IEnumerable<T> 与数组

javascript - 试图在生成器中使用 setTimeout 来控制生成随机数的过程但失败了

android - 在构建Home()时引发了以下NoSuchMethodError:在null上调用了 '>'方法。接收方:null尝试调用:>(1)

c# - 在 C# 中实现双向枚举器

c++ - 为什么我不能在 std::set 中的元素上调用非常量成员函数?