2015-03-25 100 views
8

在編碼測試中,我最近遇到了一個問題,要求我查找將在控制檯中打印的內容。問題在下面。我不明白如何理解和執行下面的代碼。數組行爲混淆

需要幫助

var arr = ["a" , "b" , "c" , "d"][1,2,3]; 
console.log(arr); 

是什麼改編的定義甚至是什麼意思?

回答

13

JS中的數組是一維的。

所以var arr = ["a" , "b" , "c" , "d"][1,2,3];

這裏[1,2,3]代表的指標。

並且逗號是前置最少的操作符,因此[1,2,3]將返回3(即總是最右邊的元素)。

因此

結果將返回在索引3d

Update: 

讓我們來看看一些點comma運營商的價值:

From MDN:

逗號操作者評估它的每個操作數(從左到右) 並返回最後一個操作數的值。

所以,它的意思是:

var a = (10, 18); 
a; //18 

另外請注意,這是必須提到它們括號內,而分配給一個變量。

如果你嘗試類似:

var a = 1,2,3; 
a; // will return 1 

所以您在使用()包起來是很重要的。

您什麼時候使用它,運算符?

如果要在需要單個表達式的位置包含多個 表達式,則可以使用逗號運算符。該運算符的最常見用法是在for循環中提供多個參數。

for (var i = 0, j = 9; i <= 9; i++, j--) 

現在,您已經瞭解關於comma操作,讓我們來看看幾個例子來測試我們的理解:

1. var a = (1,3)/(2,1); 
    a // what will be the o/p 

2. var a = ["Stack", "OverFlow","is","Awesome"][1,3,2][2,0] 
    a // What will be the o/p 

3. var a = (true,0,1), b, c; 
    if(b,c,a) { 
     console.log("Will it execute?"); 
    } 
+2

正確。 OP,至少它看起來不是這樣的:'var wtf =「test」[1,2,3];'這可能更令人困惑;) – 2015-03-25 07:06:02

+0

@DavidTitarenco這是一個很好的:) – mohamedrias 2015-03-25 07:07:52

+2

棒極了!我今天學了些新東西。我不知道逗號令牌在之前的語言中有特殊含義。謝謝 – 2015-03-25 07:14:02

5

你的榜樣抓住了我offguard。這是另一個說明發生了什麼的例子。基本上,逗號分隔值的列表評估爲最後的值。

if (false, false, true) { 
    console.log("hello") 
} 
// --> "hello" 
+0

核心概念的簡化 – slebetman 2015-03-25 07:13:23