【问题标题】:Different object types不同的对象类型
【发布时间】:2013-09-10 18:44:20
【问题描述】:

快速拍摄,

在 jQuery 中,$("#doesNotExist") 返回“Object []”。

在 JavaScript 中,

  • (function(){return new Object;}).call(); 返回“对象{ }”。
  • (function(){return Array;}).call(); 返回 "Array()" 并且
  • (function(){$n=[];return $n;}).call(); 仅返回“[ ]”,也不返回“Object [ ]”。

(注意 []{},根据 Firebug,最新版本)。

我不确定要搜索什么,但我想知道两者之间的区别以及如何在 JavaScript 中获得相同的结果。 提前致谢。

【问题讨论】:

  • 这个:document.querySelectorAll("#doesNotExist") 也返回 []
  • @Chris,用一些更深入的数据更新了我的答案。 =]

标签: javascript jquery oop object


【解决方案1】:

$("#doesNotExist") 返回一个空的jQuery object,与$() 一样。

jQuery 对象具有类数组结构,因此 Firebug 表示:Object[] 表示类数组对象。


我查看了 Firebug 源代码,发现它如何将 jQuery 对象分类为类数组对象。当给定对象包含 splice 方法 (source) 时,isArrayLike 方法返回 true

因此,出于演示目的,从 Firebug 12-13.0a 开始,这是在 Firebug 上强制显示类似数组的一种方法:

console.log({
    0: 'hi',
    length: 1,
    splice: function(){} //makes Firebug display as array-like object
});

结果:

【讨论】:

    【解决方案2】:

    [] 表示数组,而{} 是单个对象。

    【讨论】:

    • 但是(function(){return Array;}).call(); 返回“Array()”而不是“Object []”?
    • (function(){$n=[];return $n;}).call(); 只是“[ ]”而不是“Object [ ]”
    • 所以为了生成一个 jQuery 兼容的空 DOM 对象数组,我需要选择 $("doesntexist") 并且不能重新生成它?这对我来说似乎有点 QND...
    • 你总是可以看看 jQuery 的实现并模仿它。
    猜你喜欢
    • 2017-04-22
    • 2018-06-21
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 2018-02-10
    • 2015-06-22
    相关资源
    最近更新 更多