Symbol.length
长度属性值为0
Symbol.prototype
表示Symbol构造函数的原型
内置符号
除了自己的符号之外,JavaScript还有一些内置的符号,代表了内部语言行为,这些符号在ECMAScript 5以及之前没有向开发者公开。 这些符号可以使用以下属性进行访问:
Symbol.iterator
返回对象的默认迭代器,通常使用for ... of
Symbol.asyncIterator
返回对象的AsyncIterator,通常使用 for await of
Symbol.match
与字符串匹配的方法,也用于确定对象是否可用作正则表达式。 由String.prototype.match()使用。
Symbol.replace
一种替换字符串的匹配子字符串的方法。通常使用String.prototype.replace()。
Symbol.search
返回与正则表达式匹配的字符串中的索引的方法。通常使用String.prototype.search()。
Symbol.split
在匹配正则表达式的索引处拆分字符串的方法。 通常使用String.prototype.split()。
Symbol.hasInstance
确定构造函数对象是否将对象识别为其实例的方法。通常使用instanceof。
Symbol.isConcatSpreadable
一个布尔值,指示对象是否应平铺到其数组元素。 通常使用Array.prototype.concat()。
Symbol.unscopables
一个对象的值,其自己的和继承的属性名称被排除在关联对象的with环境绑定之外。
Symbol.species
用于创建派生对象的构造函数。
Symbol.toPrimitive
将对象转换为原始值的方法。
Symbol.toStringTag
用于默认描述对象的字符串值。 通常使用Object.prototype.toString()。
Symbol.for(key)
用给定键搜索现有符号,如果找到则返回它。 否则,使用该键在全局符号注册表中创建一个新符号。
Symbol.keyFor(sym)
从全局符号注册表中为给定符号检索共享符号密钥。
所有符号都从Symbol.prototype继承。
Symbol.prototype.constructor
返回创建实例原型的函数。 这是默认的符号功能。
Symbol.prototype.toSource()
返回包含Symbol对象源的字符串。 重写Object.prototype.toSource()方法。
Symbol.prototype.toString()
返回包含符号描述的字符串。 重写Object.prototype.toString()方法。
Symbol.prototype.valueOf()
返回Symbol对象的原始值。 重写Object.prototype.valueOf()方法。
Symbol.prototype[@@toPrimitive]
返回Symbol对象的原始值。
typeof Symbol() === 'symbol' // true
typeof Symbol('foo') === 'symbol' // true
typeof Symbol.iterator === 'symbol' // true
符号类型转换
符号类型和 for...in 迭代
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"
}
JSON.stringify({[Symbol('foo')]: 'foo'});
// '{}'
var sym = Symbol('foo');
var obj = {[sym]: 1};
obj[sym]; // 1
obj[Object(sym)]; // still 1