【问题标题】:javascript, is there an isObject function like isArray? [duplicate]javascript,是否有像 isArray 这样的 isObject 函数? [复制]
【发布时间】:2012-10-14 06:27:25
【问题描述】:

可能重复:
Check that value is object literal?

我正在处理一个可以为 null、0 或 json 对象的输出。有了这个,我需要想出一种方法来确定该输出是否确实是一个真实的对象。但是我找不到任何东西可以给我一个明确的答案,即javascript功能中是否存在类似的东西。如果没有,是否有其他方法可以检测这是否是一个对象?

【问题讨论】:

  • 嗯,看起来这个答案可能是我正在寻找的盟友,但似乎可以解决。如果那是最好的,那就接受吧:-D
  • 试试这个isObject: function(arg) { return Object.prototype.toString.call(arg).indexOf('Object') !== -1; }
  • Object.prototype.toString.call(variable) === '[object Object]'

标签: javascript jquery arrays object


【解决方案1】:

在 jQuery 中有 $.isPlainObject() 方法:

描述:检查一个对象是否是一个普通对象(创建 使用“{}”或“新对象”)。

【讨论】:

  • 很好,但有一个警告:“注意:宿主对象(或浏览器宿主环境用来完成 ECMAScript 执行环境的对象)有许多不一致的地方,这些不一致之处很难稳健地检测交叉-平台。因此,在某些情况下,$.isPlainObject() 可能会在不同浏览器之间进行不一致的评估。"
  • 原生版本是:(obj instanceof Object && !(obj instanceof Array))
  • 实际上只有好的答案...@StevenVachon:obj = new Number(123) 失败
  • Object.isPlainObject() 请与 Array.isArray() 一起使用!
  • @JoshMc 这些是现代浏览器最近开始支持的相当新的方法。 3 年前,大多数浏览器对这个问题一无所知,所以复杂的 vanilla 和简短的 jQuery 解决方案是最佳实践。
【解决方案2】:

您可以使用typeof 运算符。

if( (typeof A === "object" || typeof A === 'function') && (A !== null) )
{
    alert("A is object");
}

请注意,因为typeof new Number(1) === 'object'typeof Number(1) === 'number'; 应避免使用第一种语法。

【讨论】:

  • 看起来有潜在的退路,因为null 可能会导致误报。
  • 试试A = []。数组也是对象 :)
  • @bhovhannes JSON 不是一个对象...
  • @VisioN,是的,我刚刚引用了这个问题。我的意思是我们有空值、0 值和一些对象,我们可以使用答案中的代码检查对象(无论它是否是数组)。
  • function isObject(A) { return A === null || (A && A.toString() === "[object Object]"); } 以上比检查typeof A === "object" 更可靠,因为如果 A 是数组或 A=new Number(8),后者也将返回 true。
【解决方案3】:

使用下面的

它会返回一个真或假

theObject instanceof Object

【讨论】:

  • -1 [] instanceof object === true
  • @naomik 为什么投反对票?接受的答案也为数组返回 true,除此之外,这就是 OP 所要求的。此外,此方法是faster,而不是接受的方法,并且不涉及对 null 的额外检查;也使其更易于阅读。我希望我能投票十次。
  • @rvighne,我也否决了这个答案。基于这个问题,OP 似乎想要将对象与数组区分开来。使用这种方法你会得到误报。
  • @naomik 一个数组一个对象。 JSON 根元素可以是数组也可以是对象,试试JSON.parse("[1,2,3]")。 OP 说他们不想要 0 或 null。
  • -1 因为instanceof 对来自不同帧的对象失败。 perfectionkills.com/…
猜你喜欢
  • 2020-01-02
  • 1970-01-01
  • 2011-09-11
  • 2023-03-26
  • 2015-12-06
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
相关资源
最近更新 更多