0

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?

4

4 回答 4

2

数组使用数字索引。当您使用字符串“索引”时,它只是向数组对象添加一个新属性,但新值不在数组中。

因此,数组仍然是空的,但您可以像访问任何其他对象一样访问您的值。

您的代码相当于

var params = {}; //new object (not array)
params['return']='json'; //new property added to object
于 2013-09-18T23:26:33.490 回答
1

一些东西:

你忘了var

var params = new Array();

但是数组采用数字索引,因此params['return']它实际上不是数组的成员,而是表示数组的对象的成员,因此它不会影响长度。

您可以使用一个对象,但对象没有长度:

var params = {};
params['return'] = 'json';

要获取长度,您可以计算该对象中的键并获取结果数组的长度:

var len = Object.keys(params).length;
于 2013-09-18T23:27:33.387 回答
0

您可以创建一个数组,在其上推送内容,并将属性分配给它的值,如下所示:

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]

于 2013-09-19T00:29:54.690 回答
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
于 2013-09-18T23:26:51.433 回答