任何人都可以帮忙解释为什么长度返回0?非常感谢你提前!
var errors = [];
errors[''] = "Monday Morning slot already taken. Would you like to replace it?";
console.log(errors);
document.write(errors.length);
答案 0 :(得分:19)
只有数字索引会影响数组的.length
。
允许使用其他命名属性,但它们不是Array对象的典型用法。通过使用""
,您将在对象上创建非数字属性。您可以像这样访问它:
errors[""];
但是你不能用典型的Array方法来实现它。
对于命名属性,通常使用Object。无论哪种方式,您都可以使用Object.keys()
计算自己的可枚举属性(包括数字索引)的数量。
Object.keys(errors).length;
答案 1 :(得分:7)
因为这不是你添加项目的方式,因为Arrays只接受数字键。你这样做:
errors.push("blah"); /*or*/ errors[0] = "blah";
//Now if you check the length:
errors.length; //1
此外,如果您将其用作对象,''
也不是有效名称。
*更正:看起来您可以使用""
(空字符串)作为键。
答案 2 :(得分:2)
您的数组需要数字输入,您当前使用空字符串作为索引,这是无效的。
您可以指定索引,使用给定元素初始化Array,或将该项目推送到数组:
// Option 1: Specify index
var errors = [];
errors[0] = 'Monday Morning slot already taken. Would you like to replace it?';
// Options 2: Initialise the Array with values
var errors = ['Monday Morning slot already taken. Would you like to replace it?'];
// Option 3: Push the item to Array
var errors = [];
var myString = 'Monday Morning slot already taken. Would you like to replace it?';
errors.push(myString);
答案 3 :(得分:0)
当您使用字符串键而不是int时,JavaScript会将您的数组视为存储键/值对的对象。
如@cookiemonster所述,您可以使用Object.keys(errors).length;获得长度。
此外,您可以考虑使用JavaScript ES6 Map。
var errormap = new Map();
errormap.set('err101', 'Description for error 101');
errormap.set('err101', 'Description for error 101');
要获取基于错误密钥的错误描述的描述,
console.log(errormap.get('err101'));
您只需编写以下内容即可获取Map对象的长度:
console.log(errormap.size);
答案 4 :(得分:0)
任何数组的索引都从零开始,当您尝试获取特定索引处的值或更改特定索引的值时,您将索引指定为整数,该整数总是从方括号内的零开始。< /p>
例如
let errors = [] // 创建一个空数组的新实例。
//向数组中添加item有两种方式;
将项目添加到数组的两种方法都会将项目添加到零处。
为了让您的代码正常工作,请在 [] 内使用整数而不是字符串。我希望你明白要点。