2012-03-13 106 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); 
});