2012-07-09 28 views
5

例如,jQuery的返回值是Array,但构造函数是Object。怎么样?

$(document) // [ #document ] : document object in array 
typeof $(document) // "object" 
$(document).constructor // function Object() { [native code] } or function (a,b) { return some function; } 

如果值是数组,它必须是数组构造。

它不是像对象一样的数组。因为像对象这样的数组只有数组属性,不像[]。

这怎么可能?

add: 如果可以,请展示简单示例代码。 像

a = ... 
console.log(a) // [ ... ] 
console.log(a.constructor) // function Object or something 
+0

我不理解你为什么从$(document)返回“不是数组像对象”的推理 - 如果你看看实际的jQuery源代码,你会发现它是一个类似数组的对象和_不是一个数组... – nnnnnn 2012-07-09 06:07:38

+0

@nnnnnn因为类似于数组的对象不显示为[] – Ephemera 2012-07-09 06:15:06

+0

“显示”在哪里? '$(document)'的返回是'jQuery.fn.init'的一个实例,它已经添加了'0'和'length'属性。如果它是一个'Array',它会有像'.join()'这样的数组方法,但它不会。 _查看源代码._ – nnnnnn 2012-07-09 06:20:44

回答

3

看看jQuery source$(document)创建文档元素的克隆jQuery对象,然后生成并返回array-like object

jQuery的工厂函数$()返回一个具有阵列的属性的许多 (长度时,[]数组访问运算符, 等)jQuery对象,但并不完全一样一个数组并缺少一些 数组的内置方法(如.pop()和.reverse())。

+0

现在我很困惑。如果它返回一个对象数组,它的构造函数不应该给'function Array(){// ..}'? – boring 2012-07-09 06:11:58

+1

它不生成或返回一个数组,它在添加'0'和'length'属性后返回一个'jQuery.fn.init'实例。也就是说,它返回一个类似数组的对象。 – nnnnnn 2012-07-09 06:12:53

+0

澄清答案。 – RobB 2012-07-09 06:19:03

0

的阵列,如在[],也是在JavaScript的对象。在JS大多一切都是对象,如函数,数组,对象文本,正则表达式...要真正了解你所要对付的是一个数组,你可以这样做:

Object.prototype.toString.apply(myarray) === '[object Array]' 
相关问题