前面说了 symbol 是一种数据类型。既然是一种数据类型,那么它就应该支持循环迭代等计算。那么 symbol 是如何进行迭代的呢?本文将为你揭开答案。
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
: » Symbols 循环迭代与 for…in 迭代
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/251238.html