数组长度返回0

Jus*_*ris 9 javascript arrays

任何人都可以帮助解释为什么长度返回0?非常感谢你提前!

var errors = [];
errors[''] = "Monday Morning slot already taken. Would you like to replace it?";
console.log(errors);
document.write(errors.length);
Run Code Online (Sandbox Code Playgroud)

coo*_*ter 21

只有数字索引会影响.length数组.

允许使用其他命名属性,但它们不是Array对象的典型用法.通过使用"",您将在对象上创建非数字属性.您可以像这样访问它:

errors[""];
Run Code Online (Sandbox Code Playgroud)

但是你不能用典型的Array方法来实现它.


对于命名属性,通常使用Object.无论哪种方式,您都可以通过使用获得自己的可枚举属性(包括数字索引)的数量Object.keys().

Object.keys(errors).length;
Run Code Online (Sandbox Code Playgroud)


Der*_*會功夫 6

因为这不是你添加项目的方式,因为Arrays只接受数字键.你这样做:

errors.push("blah");  /*or*/  errors[0] = "blah";

//Now if you check the length:
errors.length;  //1
Run Code Online (Sandbox Code Playgroud)

此外,如果您将其用作对象,'' 则也不是有效名称.

*更正:看起来你可以使用""(空字符串)作为键.


Fer*_*ras 6

当您使用 string key 而不是 int 时,JavaScript 会将您的数组视为存储键/值对的对象。

正如@cookiemonster提到的,你可以使用 Object.keys(errors).length 获取长度;

另外,您可以考虑使用JavaScript ES6 Map

var errormap = new Map();
errormap.set('err101', 'Description for error 101');
errormap.set('err102', 'Description for error 102');
Run Code Online (Sandbox Code Playgroud)

根据错误key获取错误描述的描述:

console.log(errormap.get('err101'));
Run Code Online (Sandbox Code Playgroud)

您可以通过简单地编写以下内容来获取 Map 对象的长度:

console.log(errormap.size);
Run Code Online (Sandbox Code Playgroud)