Symbol(Symbol.toStringTag) 和Object.prototype.toString的关系

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__:


1.png

当然,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。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容