首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对象密钥如何是Symbol.iterator类型的?

对象密钥如何是Symbol.iterator类型的?
EN

Stack Overflow用户
提问于 2017-01-19 10:49:37
回答 1查看 392关注 0票数 3

我知道ES5对象键是字符串类型的。如果我为对象键指定了其他任何内容,例如,它将被转换为string:

代码语言:javascript
复制
var o = {}
var f = function() {}
// `toString` method is called on f
o[f]= 3

在这里文章我看到Symbol.iterator被用作键:

代码语言:javascript
复制
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是被胁迫成字符串的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-19 10:55:35

简短的回答:Symbol.iterator不会强行进入字符串。

Symbol.iterator返回对象的零参数函数,符合迭代器协议。 "Symbol.iterator“是一个返回对象默认Iterator的方法。由for-of语句的语义调用。

请看下面的示例:

代码语言:javascript
复制
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“为符号。它每次都创建一个新符号:资源

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41739930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档