为什么我们必须用 [Symbol.iterator] 定义 Symbol.iterator ?对于 javascript 中的可迭代对象?

Why do we have to define Symbol.iterator with [Symbol.iterator] ? for iterables in javascript?

为什么我们要用那些[]在js中定义一个@@iterator协议。

// Works smoothly
var iterable = {
   [Symbol.iterator]() {}
}

// This fails with SyntaxError: unexpected token . 
var iterable = {
   Symbol.iterator() {}
}

因为对象字面量中的键必须是有效的标识符 ("variable names") 并且按字面意思作为给定的名称。如果要使用表达式作为键([=10=的值],而不是字面名称"Symbol.iterator"),则需要使用computed property { [...]: ... }语法。