对象原型上的toString()。call()是如何获取Array的类型的

时间:2016-01-10 13:23:18

标签: javascript arrays object call prototype-programming

我正在查看代码,以确定对象是否是一个数组,而我遇到了this answer

代码工作正常,但我无法理解它与[object Array]进行比较的方式

我试图获取typeof Array,但它发生了错误。所以我对这段代码感到困惑"

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {

我很想知道对Object的toString.call( _ON_AN_ARRAY_ )方法调用如何正确获取Array对象的类型。

1 个答案:

答案 0 :(得分:3)

从技术上讲,数组是一个对象,所以当你执行typeof arrayVar时得到object,但它并不是特定于对象类的。

然而,当你查看一个Object prototype.toString()时,它也将返回“object”,但是当你查看一个Object原型并传入一个对象时,它会返回该对象和对象类。

您可以在ECMAScript5 spec (§15.2.4.2)中看到有关Object.prototype.toString方法的内容:

  

调用toString方法时,将执行以下步骤:

     
      
  1. 如果未定义此值,请返回“[object Undefined]”。
  2.   
  3. 如果此值为null,则返回“[object Null]”。
  4.   
  5. 设O是调用ToObject传递此值作为参数的结果。
  6.   
  7. 让class为O的[[Class]]内部属性的值。
  8.   
  9. 返回String值,该值是连接三个字符串“[object”,class和“]”的结果。
  10.   

最后一个是“如何”的答案。