Javascript数组任意索引内存分配

时间:2014-02-13 05:28:47

标签: javascript jquery arrays memory-management

声明一个数组并初始化一些任意索引分配内存中的所有数组元素,即使是未定义的数组元素?

示例:

var users = [];

function addUser(userID, name, address) {
   if (typeof (users[userID]) === 'undefined')
       users[userID] = new User(userID, name, address)
}

function User (userID, name, address) {
    this.userID = userID;
    this.name = name;
    this.address = address;
}

$(function () {
   addUser(63, 'John', 'VA');
   addUser(5, 'Kate', 'NY');
   addUser(895, 'Yaz', 'DC');
});

所以在上面的例子中,浏览器是否会在内存中分配896个User实例(只定义了3个)或只有3个?

谢谢,

1 个答案:

答案 0 :(得分:1)

<强>都能跟得上

JavaScript并不关心你放在数组中的内容,也不会用你没有给它的值自动填充它。

如果向阵列添加3个用户,则内存中只有3个用户。

差距中的指数只是undefined


var x = [];
// undefined

x[0] = "user1";
// 'user1'

x[3] = "user2";
// 'user2'

x[10] = "user3";
// 'user3'

x;
// ['user1',,,'user2',,,,,,,'user3']

所有这些说,你最好使用Object{}

var users = {};

function addUser(userID, name, address) {
  if (!(userID in users)) {
    users[userID] = new User(userID, name, address)
  }
}

您将拥有一个看起来像这样的对象

{"63": [object User], "5": [object User], "895": [object User]}