Symbol.toStringTag
Symbol.toStringTag
该Symbol.toStringTag
公知的符号是在创建对象的默认字符串描述中使用的字符串值属性。它由该Object.prototype.toString()
方法在内部访问。
| Symbol.toStringTag
属性的属性特性:|
|:----|
| Writable | no |
| Enumerable | no |
| Configurable | no |
描述
许多内置的 JavaScript 对象类型即便没有toStringTag
属性,也能被toString()
方法识别并返回特定的类型标签,比如:
Object.prototype.toString.call('foo' // "[object String]"
Object.prototype.toString.call([1, 2] // "[object Array]"
Object.prototype.toString.call(3 // "[object Number]"
Object.prototype.toString.call(true // "[object Boolean]"
Object.prototype.toString.call(undefined // "[object Undefined]"
Object.prototype.toString.call(null // "[object Null]"
// ... and more
其他的有一个内置的toStringTag
符号定义:
Object.prototype.toString.call(new Map() // "[object Map]"
Object.prototype.toString.call(function* () {} // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve() // "[object Promise]"
// ... and more
在创建自己的类时,JavaScript默认为“Object”标签:
class ValidatorClass {}
Object.prototype.toString.call(new ValidatorClass() // "[object Object]"
现在,在toStringTag
您的帮助下,您可以设置自己的自定义标签:
class ValidatorClass {
get [Symbol.toStringTag]() {
return 'Validator';
}
}
Object.prototype.toString.call(new ValidatorClass() // "[object Validator]"
规范
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262)The definition of 'Symbol.toStringTag' in that specification. | Standard | Initial definition. |
ECMAScript Latest Draft (ECMA-262)The definition of 'Symbol.toStringTag' in that specification. | Draft | |
浏览器兼容性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | 49 | (Yes) | 51 (51) | No support | ? | ? |
Feature | Android | Chrome for Android | Edge | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|---|
Basic support | ? | ? | (Yes) | 51.0 (51) | No support | ? | ? |