From d9e9adb5f80a819fe46349bcf6d1faec734b09cd Mon Sep 17 00:00:00 2001
From: Irvin 这会阻止创建一个显式的 Symbol 包装器对象而不是一个 Symbol 值。围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。 然而,现有的原始包装器对象,如 这会阻止创建一个显式的 Symbol 包装器对象而不是一个 Symbol 值。围绕原始数据类型创建一个显式包装器对象从 ECMAScript 6 开始不再被支持。 然而,现有的原始包装器对象,如 如果你真的想创建一个 Symbol 包装器对象 ( {{jsxref("Operators/typeof", "typeof")}}运算符能帮助你识别 symbol 类型 Symbols 在 当使用 JSON.stringify() 时,以 symbol 值作为键的属性会被完全忽略: 更多细节,请看 {{jsxref("JSON.stringify()")}}。var sym = new Symbol(); // TypeError
-new Boolean、new String以及new Number,因为遗留原因仍可被创建。new Boolean、new String以及new Number,因为遗留原因仍可被创建。Symbol wrapper object),你可以使用 Object() 函数:typeof Symbol() === 'symbol'
-typeof Symbol('foo') === 'symbol'
-typeof Symbol.iterator === 'symbol'
+typeof Symbol() === 'symbol'
+typeof Symbol('foo') === 'symbol'
+typeof Symbol.iterator === 'symbol'
Symbol 类型转换
@@ -170,23 +170,23 @@ typeof symObj; // "object"for...in 迭代中不可枚举。另外,{{jsxref("Object.getOwnPropertyNames()")}} 不会返回 symbol 对象的属性,但是你能使用 {{jsxref("Object.getOwnPropertySymbols()")}} 得到它们。var obj = {};
+
+for (var i in obj) {
+ console.log(i); // logs "c" and "d"
+}var obj = {};
-obj[Symbol("a")] = "a";
-obj[Symbol.for("b")] = "b";
-obj["c"] = "c";
-obj.d = "d";
+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("foo")]: "foo"});
-// '{}'JSON.stringify({[Symbol("foo")]: "foo"});
+// '{}'
var sym = Symbol("foo");
-var obj = {[sym]: 1};
-obj[sym]; // 1
-obj[Object(sym)]; // still 1
+var sym = Symbol("foo");
+var obj = {[sym]: 1};
+obj[sym]; // 1
+obj[Object(sym)]; // still 1
当需要对一个对象进行迭代时(比如开始用于一个for..of循环中),它的@@iterator方法都会在不传参情况下被调用,返回的迭代器用于获取要迭代的值。
一些内置类型拥有默认的迭代器行为,其他类型(如 {{jsxref("Object")}})则没有。下表中的内置类型拥有默认的@@iterator方法:
一些内置类型拥有默认的迭代器行为,其他类型(如 {{jsxref("Object")}})则没有。下表中的内置类型拥有默认的@@iterator方法: