麻烦基本的Javascript

时间:2013-09-18 23:23:52

标签: javascript

我有一段时间没有触及Javascript,现在我遇到了基本阵列的问题。

params=new Array();
params['return']='json';
alert(params.length);

当我期待0时,这总是会返回1。这有什么问题?

4 个答案:

答案 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]

加上。