Symbol.toStringTag 屬性

admin發表於2017-04-24

物件的Symbol.toStringTag屬性,指向一個方法。

在該物件上面呼叫Object.prototype.toString方法時,如果這個屬性存在,它的返回值會出現

在toString方法返回的字串之中,表示物件的型別。也就是說,這個屬性可以用來定製[object Object]或[object Array]中 object 後面的那個字串。

更多關於Symbol的內容可以參閱JavaScript Symbol一章節。

程式碼例項如下:

[JavaScript] 純文字檢視 複製程式碼
({[Symbol.toStringTag]: 'Foo'}.toString())
// "[object Foo]"
class Collection {
  get [Symbol.toStringTag]() {
    return 'xxx';
  }
}
var x = new Collection();
Object.prototype.toString.call(x) // "[object xxx]"

ES6 新增內建物件的Symbol.toStringTag屬性值如下:

[JavaScript] 純文字檢視 複製程式碼
JSON[Symbol.toStringTag]: 'JSON'
Math[Symbol.toStringTag]: 'Math'
Module 物件M[Symbol.toStringTag]: 'Module'
ArrayBuffer.prototype[Symbol.toStringTag]: 'ArrayBuffer'
DataView.prototype[Symbol.toStringTag]: 'DataView'
Map.prototype[Symbol.toStringTag]: 'Map'
Promise.prototype[Symbol.toStringTag]: 'Promise'
Set.prototype[Symbol.toStringTag]: 'Set'
%TypedArray%.prototype[Symbol.toStringTag]: 'Uint8Array' 等
WeakMap.prototype[Symbol.toStringTag]: 'WeakMap'
WeakSet.prototype[Symbol.toStringTag]: 'WeakSet'
%MapIteratorPrototype%[Symbol.toStringTag]: 'Map Iterator'
%SetIteratorPrototype%[Symbol.toStringTag]: 'Set Iterator'
%StringIteratorPrototype%[Symbol.toStringTag]: 'String Iterator'
Symbol.prototype[Symbol.toStringTag]: 'Symbol'
Generator.prototype[Symbol.toStringTag]: 'Generator'
GeneratorFunction.prototype[Symbol.toStringTag]: 'GeneratorFunction'