2014-03-03 150 views
0

當三元運算符行爲與我預期的不同時,我感到困惑。這是我的代碼:javascript三元運算符錯誤

function zeroCol() { 
    var arr = [] 
    for (var i = 0; i <= 5; i++) { 
     (i % 2 == 0) ? arr.push(0) : arr.push(1) 

     return arr.join(" ") 
    } 
} 
console.log(zeroCol()) 

它打印0,而不是我所期望的01010。但是,這使用if/else,爲什麼?

if(i%2==0) arr.push(0) 
arr.push(1); 
+4

:這可能是更有趣,讓用戶作爲參數傳遞這些價值的功能,像這樣:

function zeroCol(divisor, howMany) { var arr = []; for (var i = 0; i < howMany; i++) { arr.push(i % divisor); } return arr.join(' ') } 

應用實例。 – Cthulhu

+0

處理你的'{'和'}' – Lobo

+0

這不是一個非常合適的if語句,添加一些括號和一個else,你會得到相同的結果。 – adeneo

回答

2

讓你的生活更輕鬆,刪除它:

function zeroCol() { 
    var arr = []; 
    for (var i = 0; i <= 5; i++) { 
     arr.push(i % 2); 
    } 
    return arr.join(" ") 
} 

注意return停止功能,因此,把它的外面循環。

要建立在dfsq's comment上,請注意,此功能在當前狀態下無效。事實上,循環的限制和除數都是硬編碼的。因此,我們已經知道它的結果:​​。因爲你在第一個迭代做`return`

zeroCol(2, 4) // "0 1 0 1" 
zeroCol(3, 4) // "0 1 2 0" 
zeroCol(4, 4) // "0 1 2 3" 
+0

+1這很好:) – dfsq

+1

讓OP的生活更加輕鬆:'new Array(4).join('0 1')'。 – dfsq

+0

哈哈!不錯的一個;) – leaf

2

看起來好像您在for循環的第一次迭代之後返回。這可能是它只打印0的原因。它只執行一次三元運算符。

0

你的問題是不與操作員;你在循環內部返回,所以它在循環的第一次迭代之後返回。請將您的return語句外循環:

function zeroCol(){ 
    var arr=[] 
    for (var i=0;i<=5;i++){ 
     (i%2==0) ? arr.push(0) : arr.push(1); 
    } 

    return arr.join(" "); 
} 
console.log(zeroCol());