2011-10-20 144 views
1
var names = [name for(name in generateNames(product))]; 

generateNames只是返回產品中各種屬性的列名稱數組。這個奇怪的符號在JavaScript中意味着什麼?

但是這個名字的全稱是什麼?

+0

這對我來說看起來像一個語法錯誤(意外的令牌)。 – Quentin

+0

這就是我的教授給我們的:函數應該可調用爲:var names = [name for(name in generateNames(product))] – antonpug

+0

我就像... wtf? – antonpug

回答

7

這是一個array comprehension

這是Javascript 1.7的新功能,其工作原理與Python的list comprehensions類似。

+0

所以如果我有這樣的東西:var names = [name for(name in generateNames(product))] ...那麼這樣做的意義是什麼...數組理解? – antonpug

+0

事實上,代碼並沒有真正從數組理解中受益(你可以寫'var names = generateNames(product);')。我懷疑這只是一個例子。如果您想要投影原始數組中的每個項目,或添加條件(例如, var names = [returnSomethingFrom(name)for(name in generateNames(product))if(name!==「」)];'。 –

+0

啊哈!說得通。所以你可以添加條件。實際計算呢?有沒有辦法做到這一點?就像說我有一個數組[1,2,3],並且我想從數組中獲得最大數字,我能否以某種方式將它包括爲條件? – antonpug

4

這是一個數組理解。它被添加到JavaScript 1.7。僅適用於Firefox AFAIK等Mozilla瀏覽器。

https://developer.mozilla.org/en/New_in_JavaScript_1.7#Array_comprehensions_(Merge_into_Array_comprehensions

這裏是一個的jsfiddle你可以試試,只在Firefox中:http://jsfiddle.net/hfARW/1/

+1

啊哈!流血的東西,這是在大多數瀏覽器語法錯誤...所以我是一半:) – Quentin

+0

JavaScript 1.6,1.7,1.8。和1.9有許多實驗性的東西,它們甚至不會把它變成ECMAScript 6.它在ECMAScript 5中很多是*,但很多都是Mozilla的遊樂場。真正的理解是在CoffeeScript和Python中。 :) John Resig在[JS的版本](http://ejohn.org/blog/versions-of-javascript/)上有一個小貼子,你可能會感興趣。 –