2014-03-03 60 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());