gpt4 book ai didi

javascript - 在 Javascript 中区分数组和 "hashes"

转载 作者:可可西里 更新时间:2023-11-01 01:39:39 24 4
gpt4 key购买 nike

为了使我的一个函数的语法更好,我需要能够判断特定参数是数组还是“散列”(我知道它们只是对象)。

Typeof 不起作用,因为它们都返回相同的东西

typeof {foo:"bar"}//对象

typeof ["foo","bar"]//对象

那么我如何区分这两者呢?

我知道这可行,但我希望有更好的方法

({foo:"bar"}).constructor//对象()

(["foo","bar"]).constructor//[未定义]

编辑啊,好像firebug里的[undefined]跟Array是一回事。有点奇怪。

最佳答案

您可以按照 SLaks 的建议检查 length 属性,但是一旦您将函数对象传递给它,您就会感到惊讶,因为它实际上具有 length 属性。此外,如果对象定义了长度属性,您将再次得到错误的结果。

你最好的选择可能是:

function isArray(obj) {
return Object.prototype.toString.call(obj) === "[object Array]";
}

jQuery 使用它,还有“几个”其他人...:)

它比 instanceof 方式更能防止失败。以下文章也推荐了该方法:

'instanceof' considered harmful (or how to write a robust 'isArray') (@kagax)

另外要补充的是,这个函数几乎与 ES 5 规范中的 Array.isArray 函数相同:

15.4.3.2 Array.isArray ( arg )

  1. If Type(arg) is not Object, return false.
  2. If the value of the [[Class]] internal property of arg is "Array", then return true.
  3. Return false.

关于javascript - 在 Javascript 中区分数组和 "hashes",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3215046/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com