任何人都可以帮助解释为什么长度返回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)
因为这不是你添加项目的方式,因为Arrays只接受数字键.你这样做:
errors.push("blah"); /*or*/ errors[0] = "blah";
//Now if you check the length:
errors.length; //1
Run Code Online (Sandbox Code Playgroud)
此外,如果您将其用作对象,'' 则也不是有效名称.
*更正:看起来你可以使用""(空字符串)作为键.
当您使用 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)
| 归档时间: |
|
| 查看次数: |
32919 次 |
| 最近记录: |