我想问一个关于JavaScript数组的问题。 当我们使用for..in循环迭代时,数组的行为是否像对象一样。我的意思是在这种情况下,索引可以扮演属性(键)的角色。
答案 0 :(得分:0)
虽然您可以在数组中使用for..in语法,但您不应该因为您将迭代可能已分配给数组的任何属性。
Example:
var array = [0, 1];
array.three = 2;
for (var p in array){
console.log(array[p]); //print 0, 1, 2
}
for(var i = 0; i < array.length; i++){
console.log(array[i]); //prints 0, 1
}
因此,在处理数组时,应始终使用for var i方法以避免遇到意外行为。
答案 1 :(得分:0)
作为JS中的所有内容,数组是一个对象。
这意味着您可以将数组用作原型:
var obj = Object.create([]);
console.log(obj instanceof Array); // true
obj[0] = "value 1";
obj.test = "value of property test";
for(var i in obj) console.log(obj[i]); // "value 1" "value of property test"
或您对对象执行的任何其他操作,包括使用for ... in
循环。
但是,length
属性使用数组+1的最高(整数)索引进行更新。
var arr = ["one","two"];
arr.length; // 2
这就是为什么当你只想迭代数组的值时,它不喜欢使用for ... in
循环:你可以改用for(var i=0,var l=arr.length;i<arr.length;i++)
。
答案 2 :(得分:-1)
是的,您可以像对象一样访问数组仅当数组键是字符串时,
var sdf = [];
sdf['asd'] =45;
sdf[32] =8674;
console.log(sdf.asd) // WORKS
console.log(sdf.32) // Error
答案 3 :(得分:-1)
Array.prototype.forEach就是你想要的。请注意浏览器支持或使用修正不受支持的浏览器的框架:http://kangax.github.io/compat-table/es5/#Array.prototype.forEach
for in应该用于迭代对象属性,因为无法保证顺序。