來自MDN中的描述,如下:
每個對象都有一個toString()方法,當該對象被表示為一個文本值時,或者一個對象以預期的字符串方式引用時自動調(diào)用。默認情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象的類型。以下代碼說明了這一點:
- toString() 方法返回一個表示該對象的字符串。
- 默認情況下,toString()方法被每個Object對象繼承。如果此方法在自定義對象中未被覆蓋,toString() 返回 "[object type]",其中type是對象的類型。
var o = new Object();
o.toString(); // returns [object Object]
const arr = [1,2,3]
console.log(Array.prototype.hasOwnProperty('toString')) //true
console.log(arr.toString()) // 1,2,3
delete Array.prototype.toString
console.log(Array.prototype.hasOwnProperty('toString')) //false
console.log(arr.toString()) // [object Array]
- Array自定義了toString方法,按照原型鏈規(guī)則,arr.toString()調(diào)用的是Array.prototype.toString方法,而不是Object.prototype.toString方法。
- 可以通過call方法,將this指向Object.prototype.toString。
const arr = [1,2,3]
Object.prototype.toString.call(arr) // [object Array]
console.log(Object.prototype.toString.call(arr).slice(8, -1) === 'Array') // true