奇怪的js数组行为

strange js array behavior

本文关键字:数组 js      更新时间:2023-09-26

下面是示例代码:

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

这怎么可能?

假设(必须按照您所展示的方式使用预定义的变量,这样我们就无法知道实际上是什么,除非从您对其执行的测试中得出结论),因为params数组而不是对象

数组的设计目的是用数字键保存有序的值序列。

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

字符串化数组只连接数字键。因此,如果有数字键,将其与空字符串进行比较只会给出一个假值。

$.each注意到它在数组上迭代,并且只命中数字键。

df不是数字键。

没有什么奇怪的。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);
});