JavaScript中for和for var的区别

12

我在PHP中填充一个关联数组并在JS函数中访问该数组。我使用json_encode()将PHP数组转换为JS数组。我使用IE 8运行此应用程序。在某些安装IE8的计算机上,for(;;)可以工作,但在其他计算机上则失败。在某些安装IE8的计算机上,for(var in)可以工作,但在其他计算机上则失败。以下代码有什么区别?


for (var k = 0; k < ruleList.length; k++){ //do something } 

for (var x in ruleList){ //do something }

5
在对象上使用for...in,在数组上使用for - Tushar
4个回答

4

对于for(i in x),它适用于数组和对象。

var x = [1, 2, 3];
for(var i in x) console.log(x[i]);

var o = {1:1, 2:2, 3:3};
for(var i in o) console.log(o[i]);

虽然for(;;)只适用于数组

var x = [1, 2, 3];
for(var i=0; i<x.length; i++) console.log(x[i]);

var o = {1:1, 2:2, 3:3};
for(var i=0; i<o.length; i++) console.log(x[i]); // returns undefined because object o doesn't have property length

但是您可以使用Object.keys来获取对象的键数组

var o    = {1:1, 2:2, 3:3};
var keys = Object.keys(o);
for(var i=0; i<keys.length; i++) console.log(o[keys[i]]);

常见做法是使用for(i in x)来处理对象,而使用for(;;)来处理数组


谢谢。我是 PHP 和 JS 的新手。 - KeepCalmAndCode

2

MDN文档中所述:

for...in语句按任意顺序迭代对象的可枚举属性。对于每个不同的属性,都可以执行语句。

第一个语句用于数组,而第二个语句用于获取对象的所有键。


0

这个问题已经有了讨论和答案。

请参考问题以了解区别。

for...in语句按任意顺序迭代对象的可枚举属性。对于每个不同的属性,都可以执行语句。

for语句创建一个循环,由三个可选表达式组成,用分号隔开,后跟在循环中执行的语句或一组语句。


谢谢。之前没找到这个。 - KeepCalmAndCode

0

JavaScript没有关联数组(真的)。因此,根据您的PHP数据,您可能会得到完全不同的类型,例如:

<?php
$consecutive_keys = array(
    0 => 'Zero',
    1 => 'One',
    2 => 'Two',
);
$sparse_keys = array(
    5 => 'Five',
    10 => 'Then',
);
$dictionary = array(
    'Foo' => 'Bar',
);

echo json_encode($consecutive_keys) . PHP_EOL;
echo json_encode($sparse_keys) . PHP_EOL;
echo json_encode($dictionary) . PHP_EOL;

["Zero","One","Two"]     <-- Array
{"5":"Five","10":"Then"} <-- Object
{"Foo":"Bar"}            <-- Object

由于 JavaScript 数组是 JavaScript 对象的子集,因此您会发现 var x in ruleList(循环遍历对象属性)在两种情况下都可以工作,但当您有一个数组时它不会按您的预期执行。

谢谢。很好地阐明了数组和对象之间的区别。这完全取决于我如何在php中创建数组。 - KeepCalmAndCode

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接