Symbol(Symbol.toStringTag)
Symbol(Symbol.toStringTag) 是一个特殊的 Symbol 值,它用于指定一个对象的默认字符串描述。当使用 Object.prototype.toString 方法时,这个 Symbol 值会被用来提供一个对象的标签,以改善对象的默认字符串表示。
在 JavaScript 中,每个内置对象类型都有一个默认的 toStringTag 值。例如,当你使用 toString 方法时,HTMLDivElement 对象会返回一个包含该标签的字符串。
以下是 Symbol.toStringTag 的一个例子:
const div = document.createElement('div');
console.log(Object.prototype.toString.call(div)); // 输出: "[object HTMLDivElement]"
在这个例子中,[object HTMLDivElement] 是 div 元素的默认字符串表示。HTMLDivElement 这部分就是由 Symbol.toStringTag 属性提供的。我们也可以在控制台打印一下dom的__proto__:
当然,Symbol.toStringTag 也可以自定义。如果你创建了一个自己的类,并希望它有一个特定的标签,你可以在你的类中设置 Symbol.toStringTag 属性:
class MyObject {
[Symbol.toStringTag] = 'MyObjectClass';
}
const myObj = new MyObject();
console.log(Object.prototype.toString.call(myObj)); // 输出: "[object MyObjectClass]"
在这个例子中,我们为 MyObject 类设置了一个自定义的 toStringTag,所以当 Object.prototype.toString 被调用时,它会返回 "[object MyObjectClass]"。
总的来说,Symbol(Symbol.toStringTag) 是一个内置的 Symbol 值,用于提供对象的默认字符串描述,改善对象的 toString 方法的输出。
Object.prototype.toString
Object.prototype.toString 是 JavaScript 中的一个内置方法,它返回一个表示对象类型的字符串。这个方法被设计为一个通用的类型检测工具,可以用来确定一个值的类型。
当你调用 Object.prototype.toString 方法时,它会在内部使用 Symbol.toStringTag 属性(如果该对象有这个属性的话),来生成一个表示对象类型的字符串。如果没有 Symbol.toStringTag 属性,它会回退到使用对象的构造函数名称。
以下是一些 Object.prototype.toString 方法的例子:
const obj = {};
console.log(Object.prototype.toString.call(obj)); // 输出: [object Object]
const arr = [];
console.log(Object.prototype.toString.call(arr)); // 输出: [object Array]
const date = new Date();
console.log(Object.prototype.toString.call(date)); // 输出: [object Date]
const func = function() {};
console.log(Object.prototype.toString.call(func)); // 输出: [object Function]
const num = 123;
console.log(Object.prototype.toString.call(num)); // 输出: [object Number]
const str = 'hello';
console.log(Object.prototype.toString.call(str)); // 输出: [object String]
const bool = true;
console.log(Object.prototype.toString.call(bool)); // 输出: [object Boolean]
const und = undefined;
console.log(Object.prototype.toString.call(und)); // 输出: [object Undefined]
const nullValue = null;
console.log(Object.prototype.toString.call(nullValue)); // 输出: [object Null]
const sym = Symbol('sym');
console.log(Object.prototype.toString.call(sym)); // 输出: [object Symbol]
Object.prototype.toString 方法通常用于多态性检查,因为它能够正确识别原始值和对象的类型。请注意,Object.prototype.toString 方法是 Object.prototype 上的一个方法,所以它可以通过调用 .call 或 .apply 方法被调用,并且可以传递任何值作为 this 参数。如果 this 参数不是对象,则会返回 "[object Undefined]" 或 "[object Null]",取决于 this 参数是 undefined 还是 null。