2016-05-26 60 views
2

我在php中填充關聯數組並訪問JS函數中的數組。我使用json_encode()將php數組轉換爲JS數組。我使用IE 8來運行這個應用程序。在一些使用IE 8 for(;;)的計算機上工作但在其他計算機上失敗。在一些使用IE 8 for(var in)的機器上工作但在其他機器上失敗。下面的代碼有什麼區別?在vs中var與var之間的區別

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

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

在對象上使用'for ... in',在數組上使用'for'。 – Tushar

回答

0

像它說在the MDN documentation

爲... in語句遍歷一個 對象的枚舉的屬性,以任意順序。對於每個不同的屬性,可以執行語句 。

您的第一條語句用於數組,第二條語句用於獲取數組,而第二條語句用於獲取對象的所有鍵。

0

已經有討論和解答了這個問題。

請參考Question瞭解其差異。

for ... in語句以任意順序遍歷對象的可枚舉屬性。對於每個不同的屬性,可以執行語句。

for語句創建一個由三個可選表達式組成的循環,括在圓括號中並用分號分隔,後跟一個語句或循環中執行的一組語句。

+0

謝謝。之前沒有找到。 –

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(它通過對象的屬性循環)種在這兩種情況下都可以工作,但是當你有一個數組時,它不會做你期望的。

+0

謝謝。數組和對象之間的很好的說明。這一切都取決於我如何在PHP中創建數組。 –

2

好,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(;;)

+0

謝謝。我是PHP和JS的新手 –

相關問題