【问题标题】:How toString().call() on object prototype is fetching the type of Array对象原型上的 toString().call() 如何获取 Array 的类型
【发布时间】:2016-04-14 20:07:27
【问题描述】:

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

代码运行良好,但我无法理解它是如何与[object Array] 进行比较的

我试图获取typeof Array,但它抛出了一个错误。所以我对这段代码感到困惑”

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

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

【问题讨论】:

  • 您链接到的 QA 有一个指向 Crowder 的非常完整解释的链接:blog.niftysnippets.org/2010/09/say-what.html 所以很难猜出您缺少什么。
  • 顺便说一句,由于Array.isArray,所有这些现在对于数组来说已经过时了。
  • @DenysSéguret 我还没有浏览过这个非常有趣且简单的链接.....thx
  • Check if object is array?的可能重复
  • @Jacques 好的,抱歉,我该如何解决这个问题?

标签: javascript arrays object call prototype-programming


【解决方案1】:

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

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

您可以在ECMAScript5 spec (§15.2.4.2) 中看到它对 Object.prototype.toString 方法的说明:

在调用toString方法时,会采取以下步骤:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-12
    • 2014-01-07
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多