共计 1078 个字符,预计需要花费 3 分钟才能阅读完成。
一、概念
Symbol.toStringTag 是一个内置 symbol,它通常作为对象的属性键使用,对应的属性值应该为字符串类型,这个字符串用来表示该对象的自定义类型标签,通常只有内置的 Object.prototype.toString() 方法会去读取这个标签并把它包含在自己的返回值里。
二、使用
许多内置的 JavaScript 对象类型即便没有 toStringTag 属性,也能被 toString() 方法识别并返回特定的类型标签,比如:
Object.prototype.toString.call('pat'); // "[object String]"
Object.prototype.toString.call(3); // "[object Number]"
另外一些对象类型则不然,toString() 方法能识别它们是因为引擎为它们设置好了 toStringTag 标签:
Object.prototype.toString.call(new Map()); // "[object Map]"
Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
但自己创建的类和普通对象不会有这份特殊待遇,toString() 找不到 toStringTag 属性时只好返回默认的 Object 标签:
class ValidatorClass {}
Object.prototype.toString.call(new ValidatorClass()); // "[object Object]"
const obj = {};
Object.prototype.toString.call(obj); // "[object Object]"
加上 toStringTag 属性,自己定义的类也会有自定义的类型标签了:
class ValidatorClass {get [Symbol.toStringTag]() {return "Validator";}
}
Object.prototype.toString.call(new ValidatorClass()); // "[object Validator]"
const obj = {};
Object.defineProperty(obj, Symbol.toStringTag, { value: 'CustomObject'}); // "[object CustomObject]"
正文完
发表至: javascript
2019-11-18