2010-09-17 46 views
3

下面的索引變量被錯誤地初始化,因爲f()將返回除數字之外的東西,比如字符串。那麼這裏可能發生的最糟糕的事情是什麼?我的測試似乎表明,它沒有任何效果,但現在我想知道......當javascript數組被視爲對象時發生了什麼?

function index(o, f) { 
    var index = []; // should be index = {}; 
    each(o, function(k, v, o) { index[f(k, v, o)] = v; }); 
    return index; 
} 

回答

4

JavaScript數組是有自動設置length財產和繼承的Array.prototype特殊對象。
除非您使用length屬性,否則將數組作爲對象處理並沒有什麼壞處。

0

您將創建一個關聯數組,這是一個有效的JavaScript結構。儘管它在技術上與對象不同,但您可以像對待對象一樣與數組交互(for ... in迭代,myarray [key]獲取值)。如果您懷疑某些鍵是字符串,您可能需要考慮返回一個對象而不是數組。

2

一個數組一個對象,因此它可以被視爲沒有太多副作用。但是,這樣做可能會導致一些混淆,因爲length屬性不計算非數字鍵,並且所有數組原型函數都會忽略它們。

只要改變[]{}

0

「F()會比數字返回其他的東西,比如字符串」

若f()只返回一個字符串,然後你就可以走了,你」重新使用你的數組作爲對象並添加屬性。唯一的缺點是數組本身仍然是空的,所以例如你不能計算你添加了多少物品。

如果f()可以返回字符串和數字,它會創建一個混亂。循環有時會填充數組,有時是對象的屬性。

我不確定你的意思是「像字符串」,但如果f()返回的既不是數字也不是字符串,那麼它不會工作。

相關問題