JS.next

JavaScriptの最新実装情報を追うブログ

@@toStringTagが実装された

概要

例えば『Object.prototype.toString.call([])』と呼ぶと、『"[object Array]"』と帰ってくるが、
その「Array」の部分をどういう表記にするか設定できるシンボルが実装された。


function Cat() { }
var cat = new Cat

console.log( '' + cat )  // "[object Object]"

Cat.prototype[Symbol.toStringTag] = 'Cat'

console.log( '' + cat )  // "[object Cat]"


ただし次に挙げる名前には出来ない。
Arguments, Array, Boolean, Date, Error, Function, Number, RegExp, String
これらの名前に設定した場合はtoString時、頭に「~」が付く。

function Cat() { }
Cat.prototype[Symbol.toStringTag] = 'Array'

console.log( '' + new Cat )  // "[object ~Array]"


ちなみにその逆は可能である。

Array.prototype[Symbol.toStringTag] = 'Cat'
console.log( Object.prototype.toString.call([]) )  // "[object Cat]"


上で挙げた特別なもの以外のビルドインコンストラクタには@@toStringTagが定義されている。

console.log( Map.prototype[Symbol.toStringTag] )  // "Map"


実装されるバージョン

V8 3.30.16 -