2012-07-09 35 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]' 
相關問題