CARVIEW |
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
Symbol.toStringTag
Baseline
Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2017年4月.
Symbol.toStringTag
は静的データプロパティで、ウェルノウンシンボルである Symbol.toStringTag
を表します。Object.prototype.toString()
は this
に対して、このオブジェクトの型を表す文字列を持つプロパティを、このシンボルで探します。
試してみましょう
class ValidatorClass {
get [Symbol.toStringTag]() {
return "Validator";
}
}
console.log(Object.prototype.toString.call(new ValidatorClass()));
// Expected output: "[object Validator]"
値
ウェルノウンシンボル Symbol.toStringTag
です。
Symbol.toStringTag のプロパティ属性 | |
---|---|
書込可能 | 不可 |
列挙可能 | 不可 |
設定可能 | 不可 |
例
>既定のタグ
値によっては Symbol.toStringTag
を持たず、特別な toString()
表現を持つものもあります。完全な一覧は、Object.prototype.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 シンボル
ほとんどの組み込みオブジェクトは、独自の [Symbol.toStringTag]
プロパティを提供 しています。ほとんどの組み込みオブジェクト [Symbol.toStringTag]
プロパティは書き込み不可、列挙不可、構成可能です。例外は Iterator
で、互換性の理由から書き込み可能です。
Promise
のようなコンストラクターオブジェクトでは、コンストラクターのすべてのインスタンスが [Symbol.toStringTag]
を継承し、文字列化できるように、プロパティは Constructor.prototype
にインストールされます。Math
や JSON
のようなコンストラクター以外のオブジェクトの場合、プロパティは静的プロパティとしてインストールされ、名前空間オブジェクト自体が文字列化できるようになります。コンストラクターが独自の toString
メソッドを提供することもあります(例えば、Intl.Locale
)。この場合、 [Symbol.toStringTag]
プロパティは、明示的に Object.prototype.toString
を呼び出した場合にのみ使用されます。
Object.prototype.toString.call(new Map()); // "[object Map]"
Object.prototype.toString.call(function* () {}); // "[object GeneratorFunction]"
Object.prototype.toString.call(Promise.resolve()); // "[object Promise]"
// ... などなど
独自クラスの既定のオブジェクトタグ
クラスを作成すると、 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]"
すべての DOM プロトタイプオブジェクトで利用可能な toStringTag
WebIDL の仕様変更が 2020 年半ばに行われた関係で、ブラウザーはすべての DOM プロトタイプオブジェクトに Symbol.toStringTag
プロパティを追加するようになりました。例えば、HTMLButtonElement
の Symbol.toStringTag
プロパティにアクセスするには次のようにします。
const test = document.createElement("button");
test.toString(); // "[object HTMLButtonElement]"
test[Symbol.toStringTag]; // "HTMLButtonElement"
仕様書
Specification |
---|
ECMAScript® 2026 Language Specification> # sec-symbol.tostringtag> |
ブラウザーの互換性
Loading…