来自MDN中的描述,如下:
每个对象都有一个toString()方法,当该对象被表示为一个文本值时,或者一个对象以预期的字符串方式引用时自动调用。默认情况下,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方法,按照原型链规则,arr.toString()调用的是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
网友评论