JavaScript数组

Cod*_*ahk 8 javascript

我通常使用python编写脚本/程序,但最近开始使用JavaScript进行编程,并且在使用数组时遇到了一些问题.

在python中,当我创建一个数组并在y中使用x时,我得到了这个:

myarray = [5,4,3,2,1]
for x in myarray:
    print x
Run Code Online (Sandbox Code Playgroud)

我得到了预期的输出:

5
4
3
..n
Run Code Online (Sandbox Code Playgroud)

但我的问题是,当使用Javascript时,我得到一个不同的,完全出乎意料的(对我而言)结果:

var world = [5,4,3,2,1]
for (var num in world) {
    alert(num);
}
Run Code Online (Sandbox Code Playgroud)

我得到了结果:

0
1
2
..n
Run Code Online (Sandbox Code Playgroud)

如何让JavaScript输出num作为数组中的值,如python,为什么会发生这种情况?

Poi*_*nty 10

JavaScript和Python是不同的,你在它们之间以不同的方式做事.

在JavaScript中,你真的应该(几乎)总是迭代一个带有数字索引的数组:

for (var i = 0; i < array.length; ++i)
  alert(array[i]);
Run Code Online (Sandbox Code Playgroud)

JavaScript中的"for ... in"构造为您提供了对象的,而不是.在数组上使用它很棘手,因为它作为一个对象在数组上运行,对待它与任何其他类型的对象没有什么不同.因此,如果数组对象具有其他属性 - 这是完全"合法"并且并不罕见 - 除了"普通"数组内容的索引之外,您的循环将选择那些属性.


Tak*_*Tak 7

变量num包含数组项的索引,而不是值.所以你想要:

alert(world[num])
Run Code Online (Sandbox Code Playgroud)

检索值


Eri*_*off 6

JavaScript中的for var in ...循环将键放在变量而不是实际值中.所以当使用for var时,你应该这样做:

var world = [5, 4, 3, 2, 1];
for ( var key in world ) {
    var value = world[key];
    alert(key + " = " + value);
}
Run Code Online (Sandbox Code Playgroud)

请注意,当您使用对象而不是数组时,最好使用这种循环方式.对于数组使用常见的:

for ( var i = 0, j = arr.length; i < j; i++ ) { ... }
Run Code Online (Sandbox Code Playgroud)

或者,如果您的目标是现代浏览器,则可以使用数组的forEach方法:

var arr = [1, 2, 3];
arr.forEach(function(num) {
   alert(num);
});
Run Code Online (Sandbox Code Playgroud)