symbol 在ES6中引入,是一种基本数据类型 (primitive data type)。
功能类似于一种标识唯一性的ID。
语法
Symbol([description])
参数 description 可选,字符串类型。
const sym = Symbol("foo")
typeof sym // "symbol"
所有 Symbols 继承自 Symbol.prototype.
特性
- Symbols 在
for...in迭代中不可枚举。 Object.getOwnPropertyNames()不会返回对象的symbol属性;Object.keys()不会返回对象的symbol属性;Object.getOwnPropertySymbols()可以获取对象的symbol属性;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" } console.log(Object.getOwnPropertyNames(obj)) // (2) ["c", "d"] console.log(Object.keys(obj)) // (2) ["c", "d"] console.log(Object.getOwnPropertySymbols(obj)) // (2) [Symbol(a), Symbol(b)]JSON.stringify()时,symbol属性会被忽略;JSON.stringify({[Symbol("foo")]: "foo"}); // '{}'