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

Tec*_*lvr 6 javascript arrays object call prototype-programming

我正在查看代码,以确定对象是否是一个数组,我发现了这个答案.

代码工作正常,但我无法理解它是如何进行比较的 [object Array]

我试图得到它typeof Array,但这是一个错误.所以我对这段代码感到困惑"

if( Object.prototype.toString.call( someVar ) === '[object Array]' ) {
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*ャック 3

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

\n\n

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

\n\n

你可以在ECMAScript5规范中看到(\xc2\xa715.2.4.2)它对 Object.prototype.toString 方法的说明:

\n\n
\n

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

\n\n
    \n
  1. 如果 this 值未定义,则返回“[object Undefined]”。
  2. \n
  3. 如果 this 值为 null,则返回“[object Null]”。
  4. \n
  5. 令 O 为调用 ToObject 并传递 this 值作为参数的结果。
  6. \n
  7. 令 class 为 O 的 [[Class]] 内部属性的值。
  8. \n
  9. 返回由三个字符串“[object”、class 和“]”连接而成的字符串值。
  10. \n
\n
\n\n

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

\n