JavaScript - 数组的行为类似于对象

时间:2014-07-31 05:47:47

标签: javascript arrays object

我想问一个关于JavaScript数组的问题。 当我们使用for..in循环迭代时,数组的行为是否像对象一样。我的意思是在这种情况下,索引可以扮演属性(键)的角色。

4 个答案:

答案 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应该用于迭代对象属性,因为无法保证顺序。