如果想通過 Object.prototype.toString() 方法來檢測對象類型,則需要以 Function.prototype.call()
或者 Function.prototype.apply()
的形式來調用 toString() 方法。
示例:
const _toString = Object.prototype.toString; _toString.call(new Date()); // output: '[object Date]' _toString.call(Math); // output: '[object Math]'
對於我們開發者自定義的類型,使用 toString() 方法檢測後返回的類型字符串標識可能不是我們期待的值!
示例:
class MyTestClz {} const _toString = Object.prototype.toString; const typeString = _toString.call(new MyTestClz()); console.log(typeString); // output: '[object Object]'
如果我們想自定義使用 toString() 方法進行類型檢測後的返回值,應該怎麼處理呢?
(我們可以通過設置 Symbol.toStringTag 屬性)
該屬性的屬性值應爲字符串類型,用來表示該對象的自定義類型標籤。
class MyTestClz { get [Symbol.toStringTag]() { return 'MyTestClz'; } } // ... // ... console.log(typeString); // output: '[object MyTestClz]'