Symbols 循环迭代与 for…in 迭代

前面说了 symbol 是一种数据类型。既然是一种数据类型,那么它就应该支持循环迭代等计算。那么 symbol 是如何进行迭代的呢?本文将为你揭开答案。

更多精彩内容请看 web前端中文站
www.lisa33xiaoq.net 可按Ctrl + D 进行收藏

Symbols 循环迭代与 for…in 迭代

Symbols 与 for…in 迭代

Symbols 在 for…in 迭代中不可枚举。另外,Object.getOwnPropertyNames() 不会返回 symbol 对象的属性,但是你能使用 Object.getOwnPropertySymbols() 得到它们。

 var obj = {}; obj[Symbol("a")] = "a"; obj[Symbol.for("b")] = "b"; obj["c"] = "c"; obj.d = "d"; for (var i in obj) {    console.log(i); // logs "c" and "d" }

Symbols 与 JSON.stringify()

当使用 JSON.strIngify() 时以 symbol 值作为键的属性会被完全忽略:

 JSON.stringify({[Symbol("foo")]: "foo"});                  // '{}'

Symbol 包装器对象作为属性的键

当一个 Symbol 包装器对象作为一个属性的键时,这个对象将被强制转换为它的包装过的 symbol 值:

【注:本文源自网络文章资源,由站长整理发布】

 var sym = Symbol("foo"); var obj = {[sym]: 1}; obj[sym];            // 1 obj[Object(sym)];    // still 1

参考资料

  • Glossary: Symbol data type
  • typeof
  • Data types and data structures
  • "ES6 In Depth: Symbols"(深入ES6 Symbols ) on hacks.mozilla.org
0
如无特殊说明,文章均为原作者原创,转载请注明出处

该文章由 发布

这货来去如风,什么鬼都没留下!!!
发表我的评论

Hi,请填写昵称和邮箱!

取消评论
代码 贴图 加粗 链接 删除线 签到