2012-03-13 101 views
0

下面是示例代碼:奇怪JS數組行爲

console.log('params is empty: '+(params == '')); 
console.log('params: '+params); 
console.log('df: '+params['df']); 
$.each(params, function(p_name, p_val){ 
    console.log(p_name+': '+p_val); 
}); 

與性反應:

params is empty: true 
params: 
df: 15.03.2012 

這怎麼可能呢?

+0

'params' perchance是否有'toString'方法計算爲'「」'? – rjz 2012-03-13 17:06:40

+0

@rjz - 由於問題中提到「數組」並且沒有暗示它具有任何不是「df」的屬性,所以它似乎很可能。 – Quentin 2012-03-13 17:13:21

回答

3

大概(它必須爲你呈現使用預定義變量,所以我們無法知道什麼是在實際除了由您正在執行它的測試得出結論這樣),因爲paramsarray而不是對象

數組旨在用數字鍵保存有序的值序列。

對象具有(相對)任意鍵的值。

僅對數組進行字符串連接才能連接數字鍵。因此,如果有數字鍵,將它與空字符串進行比較只會給出一個假值。

$.each注意到它正在遍歷一個數組並且只碰到數字鍵。

df不是數字鍵。

1

沒什麼奇怪的。 Params只是一個對象(內建類型Array)。

console.log('params is empty: '+(params == '')); //result of Array.toString on empty array = "" 

console.log('params: '+params); //result of Array.toString on empty array = "" 

console.log('df: '+params['df']); //if params is an object and you do params.df='15.03.2012' then params['df']='15.03.2012'. 

$.each(params, function(p_name, p_val){ 
    console.log(p_name+': '+p_val); 
});