我正在查看代码,以确定对象是否是一个数组,而我遇到了this answer。
代码工作正常,但我无法理解它与[object Array]
进行比较的方式
我试图获取typeof Array
,但它发生了错误。所以我对这段代码感到困惑"
if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
我很想知道对Object的toString.call( _ON_AN_ARRAY_ )
方法调用如何正确获取Array对象的类型。
答案 0 :(得分:3)
从技术上讲,数组是一个对象,所以当你执行typeof arrayVar
时得到object
,但它并不是特定于对象类的。
然而,当你查看一个Object prototype.toString()
时,它也将返回“object”,但是当你查看一个Object原型并传入一个对象时,它会返回该对象和对象类。
您可以在ECMAScript5 spec (§15.2.4.2)中看到有关Object.prototype.toString方法的内容:
调用toString方法时,将执行以下步骤:
- 如果未定义此值,请返回“[object Undefined]”。
- 如果此值为null,则返回“[object Null]”。
- 设O是调用ToObject传递此值作为参数的结果。
- 让class为O的[[Class]]内部属性的值。
- 返回String值,该值是连接三个字符串“[object”,class和“]”的结果。
醇>
最后一个是“如何”的答案。