📜  JavaScript Symbol prototype(1)

📅  最后修改于: 2023-12-03 15:31:38.604000             🧑  作者: Mango

JavaScript Symbol.prototype

Symbol.prototype 是通过 Symbol 构造函数创建出来的 symbol 对象的原型对象。它拥有多个属性和方法,程序员可以用于编写自己的代码。

属性
Symbol.prototype.constructor

这个属性表示实例对象的构造函数。通过 new 操作符创建出来的 symbol 对象都是通过 Symbol 构造函数创建的,所以这个属性的值为 Symbol 函数本身。

示例代码:

const sym = Symbol();
console.log(sym.constructor === Symbol); // true
Symbol.prototype.description

这个属性表示 symbol 对象的描述字符串。这个属性不是标准属性,而是当前 js 引擎的一个实现。如果在创建 symbol 对象的时候没有传入描述字符串,则这个属性值为 undefined

示例代码:

const sym1 = Symbol();
const sym2 = Symbol('foo');
console.log(sym1.description); // undefined
console.log(sym2.description); // foo
方法
Symbol.prototype.toString()

这个方法返回 symbol 对象的字符串表示。这个字符串形如 Symbol(description),其中的 description 表示 symbol 对象的描述字符串。

示例代码:

const sym = Symbol('foo');
console.log(sym.toString()); // Symbol(foo)
Symbol.prototype.valueOf()

这个方法返回 symbol 对象本身。

示例代码:

const sym = Symbol('foo');
console.log(sym.valueOf() === sym); // true
Symbol.prototype@@toPrimitive

这个方法返回 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.prototype[@@toStringTag]

这个方法返回 symbol 对象的字符串标签。可以用来区分不同的内置对象类型。

示例代码:

const sym = Symbol('foo');
console.log(Object.prototype.toString.call(sym)); // [object Symbol]
console.log(sym[Symbol.toStringTag]); // Symbol(Symbol.toStringTag)