📅  最后修改于: 2023-12-03 15:31:38.604000             🧑  作者: Mango
Symbol.prototype
是通过 Symbol
构造函数创建出来的 symbol 对象的原型对象。它拥有多个属性和方法,程序员可以用于编写自己的代码。
这个属性表示实例对象的构造函数。通过 new
操作符创建出来的 symbol 对象都是通过 Symbol
构造函数创建的,所以这个属性的值为 Symbol
函数本身。
示例代码:
const sym = Symbol();
console.log(sym.constructor === Symbol); // true
这个属性表示 symbol 对象的描述字符串。这个属性不是标准属性,而是当前 js 引擎的一个实现。如果在创建 symbol 对象的时候没有传入描述字符串,则这个属性值为 undefined
。
示例代码:
const sym1 = Symbol();
const sym2 = Symbol('foo');
console.log(sym1.description); // undefined
console.log(sym2.description); // foo
这个方法返回 symbol 对象的字符串表示。这个字符串形如 Symbol(description)
,其中的 description
表示 symbol 对象的描述字符串。
示例代码:
const sym = Symbol('foo');
console.log(sym.toString()); // Symbol(foo)
这个方法返回 symbol 对象本身。
示例代码:
const sym = Symbol('foo');
console.log(sym.valueOf() === sym); // true
这个方法返回 symbol 对象的原始值。相当于调用 valueOf()
方法。
示例代码:
const sym = Symbol('foo');
console.log(+sym); // Uncaught TypeError: Cannot convert a Symbol value to a number
console.log(sym + ''); // Uncaught TypeError: Cannot convert a Symbol value to a string
console.log(sym === sym.toString()); // false
console.log(sym === sym.valueOf()); // true
console.log(sym === sym[Symbol.toPrimitive]('default')); // true
这个方法返回 symbol 对象的字符串标签。可以用来区分不同的内置对象类型。
示例代码:
const sym = Symbol('foo');
console.log(Object.prototype.toString.call(sym)); // [object Symbol]
console.log(sym[Symbol.toStringTag]); // Symbol(Symbol.toStringTag)