我知道ES5对象键是字符串类型的。如果我为对象键指定了其他任何内容,例如,它将被转换为string:
var o = {}
var f = function() {}
// `toString` method is called on f
o[f]= 3在这里文章我看到Symbol.iterator被用作键:
let iterable = {
[Symbol.iterator]() {
let step = 0;
let iterator = {
next() {
if (step <= 2) {
step++;
}
switch (step) {
case 1:
return { value: 'hello', done: false };
case 2:
return { value: 'world', done: false };
default:
return { value: undefined, done: true };
}
}
};
return iterator;
}
};那么Symbol.iterator是被胁迫成字符串的吗?
发布于 2017-01-19 10:55:35
简短的回答:Symbol.iterator不会强行进入字符串。
Symbol.iterator返回对象的零参数函数,符合迭代器协议。 "Symbol.iterator“是一个返回对象默认Iterator的方法。由for-of语句的语义调用。
请看下面的示例:
var iterator = 'hi'[Symbol.iterator]();
iterator + ""; // "[object String Iterator]"
iterator.next(); // { value: "h", done: false }
iterator.next(); // { value: "i", done: false }
iterator.next();
typeof Symbol.iterator; // "symbol"
Symbol.iterator.toString(); // "Symbol(Symbol.iterator)"此外,Symbol也不会强制进入字符串。
要创建一个新的基本符号,可以用一个可选字符串作为其描述来编写符号(): var sym1 =符号();var sym2 =符号(“foo”);var sym3 =符号(“foo”); 上面的代码创建了三个新符号。请注意,符号( "foo“)并不强制字符串”foo“为符号。它每次都创建一个新符号:资源
https://stackoverflow.com/questions/41739930
复制相似问题