2012-01-23 50 views
1

我意識到,給出以下:k的JQuery不一致?

foo = {a:'aa', b:'bb'} 

$.each(foo, function(k,v) { ... 
$(foo).each(function(k,v) { ... 

的值,v是在兩種情況下不同。難道我是奇怪的還是jquery不一致?

編輯

如果你來這裏要說明一下。每個$和$(FOO)。每個之間的區別,我要澄清的是,我知道兩者之間的區別。

+0

'$(foo).each(...'在foo是一個普通對象時不起作用,它不會迭代它的屬性......當你需要迭代屬性對象,我推薦'Objec t.keys(foo).forEach(...'。 –

+0

簡單對象是什麼意思?我將foo視爲字典/散列表/散列 – disappearedng

+0

普通對象是從對象文字(如上例中的'foo')創建的對象。從對象文字創建的對象通常被稱爲對象。然而,因爲函數和數組也是對象,所以我們說「普通對象」強調它不是其中之一,而是一個簡單的對象。 (函數,數組,宿主對象等都是具有附加特殊功能的對象,普通對象是唯一不*有特殊行爲的對象。) –

回答

3

根據jQuery()文檔的"Working with plain objects"部分,有許多選項,但使用.each()進行枚舉不是其中之一。

正與普通對象

目前,支撐在包裹在jQuery的普通的JavaScript對象的唯一操作是:.data().prop().bind().unbind().trigger().triggerHandler()。在普通對象上使用.data()(或任何需要.data()的方法)將在對象上產生一個名爲jQuery{randomNumber}(例如jQuery123456789)的新屬性。

您應該使用通用的$.each()枚舉器。

+1

是的我認爲假設每個函數都可以應用兩種方式是一個很大的錯誤 – disappearedng

+0

@disappearedng:直到你問,我不知道你可以傳遞一個對象作爲第一個參數。國際海事組織,jQuery的功能是太過於負擔不同的行爲。 – 2012-01-23 00:47:51

0

foo alone是一個對象字面值,$(foo)是一個jQuery對象。

0

它是因爲你用第二種方法「選擇」對象(即DOM東西),而不是迭代對象。

+0

@disappearedng - 我檢測到一些諷刺嗎? –

0

在你的第一個例子你迭代這相當於一個對象:

$.each(foo, function(key, value) {... 

和你的第二個例子,你迭代選擇DOM節點,這相當於

$(foo).each(function(index, element) {... 

我希望清理東西