前面说了 symbol 是一种数据类型。既然是一种数据类型,那么它就应该支持循环迭代等计算。那么 symbol 是如何进行迭代的呢?本文将为你揭开答案。
更多精彩内容请看 web 前端中文站
http://www.lisa33xiaoq.net 可按 Ctrl + D 进行收藏
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