I haven't touched Javascript in a while and now I'm having trouble with basic arrays.
params=new Array();
params['return']='json';
alert(params.length);
This always returns 0
when I'm expecting 1
. What's wrong with this?
I haven't touched Javascript in a while and now I'm having trouble with basic arrays.
params=new Array();
params['return']='json';
alert(params.length);
This always returns 0
when I'm expecting 1
. What's wrong with this?
数组使用数字索引。当您使用字符串“索引”时,它只是向数组对象添加一个新属性,但新值不在数组中。
因此,数组仍然是空的,但您可以像访问任何其他对象一样访问您的值。
您的代码相当于
var params = {}; //new object (not array)
params['return']='json'; //new property added to object
一些东西:
你忘了var
:
var params = new Array();
但是数组采用数字索引,因此params['return']
它实际上不是数组的成员,而是表示数组的对象的成员,因此它不会影响长度。
您可以使用一个对象,但对象没有长度:
var params = {};
params['return'] = 'json';
要获取长度,您可以计算该对象中的键并获取结果数组的长度:
var len = Object.keys(params).length;
您可以创建一个数组,在其上推送内容,并将属性分配给它的值,如下所示:
var params=[];
params.push('firstly');
params[0]="jonson";
params['return']="fredy"
params.newone="json";
params.push('Carl');
现在,如果你这样做:
console.log(params.length,params);
结果是:
2 [“琼森”,“卡尔”,返回:“弗雷迪”,新人:“json”]
所以,您会看到 [0] 中的“首先”被“jonson”替换 - 所以“推送”值由数字添加[0]
Javascript 数组不像对象那样保存键值对,因此在分配值时长度不会增加。然而,它们本身就是对象,因此您可以为其属性(在本例中为return
属性)分配值。
您可能希望 params 是一个普通对象:params = {}
您需要计算属性,例如:
function dictionarySize(dict){
var size = 0;
for (key in dict){
// In practice you'd probably want to filter using hasOwnProperty
size++;
}
return size
}
alert(dictionarySize(params));
或者使用像 underscore.js 这样的库:
_.size(params);
Object.keys
也是一种选择,尽管它不适用于 IE8 和更早版本。
如果您不需要键值对,请使用 params.push:
params=new Array();
params.push('json')
alert(params.length); // 1