奇怪的js数组行为

时间:2012-03-13 17:03:38

标签: javascript jquery

以下是示例代码:

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

这是怎么回事?

2 个答案:

答案 0 :(得分:3)

据推测(当你展示使用预定义变量时必须这样,所以除了从你正在执行的测试中得出结论之外,我们无法知道实际中的内容是什么)因为params数组而不是对象

数组用于通过数字键保存有序的值序列。

对象具有(相对)任意键的值。

对数组进行字符串化只会加入数字键。因此,如果存在数字键,则将其与空字符串进行比较只会给出错误值。

$.each注意到它正在迭代一个数组而只是命中数字键。

df不是数字键。

答案 1 :(得分: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);
});