我有一段时间没有触及Javascript,现在我遇到了基本阵列的问题。
params=new Array();
params['return']='json';
alert(params.length);
当我期待0
时,这总是会返回1
。这有什么问题?
答案 0 :(得分:2)
数组使用数字索引。当您使用字符串“index”时,它只是向数组对象添加一个新属性,但新值不在数组中。
因此,数组仍为空,但您可以像使用任何其他对象一样访问您的值。
您的代码等同于
var params = {}; //new object (not array)
params['return']='json'; //new property added to object
答案 1 :(得分:1)
一些事情:
您忘记了var
:
var params = new Array();
但是数组采用数字索引,因此params['return']
实际上不是数组的成员,而是表示数组的对象,因此它不会影响长度。
您可以使用对象,但对象没有长度:
var params = {};
params['return'] = 'json';
要获得长度,您可以计算该对象中的键并获得结果数组的长度:
var len = Object.keys(params).length;
答案 2 :(得分: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
答案 3 :(得分:0)
您可以创建一个数组,在其上推送内容,并将属性分配给它的值,如下所示:
var params=[];
params.push('firstly');
params[0]="jonson";
params['return']="fredy"
params.newone="json";
params.push('Carl');
现在,如果你这样做:
console.log(params.length,params);
结果是:
2 [“jonson”,“Carl”,返回:“fredy”,newone:“json”]
所以,你看“[first]”被[0]中的“jonson”取代 - 所以“推”值由数字[0]