用 Object.prototype.toString.call(arg) 检测对象类型

来自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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容