2011-09-30 98 views
2

我有一种说法:三元运营商一直在评估为true部分

var sep = '  |  '; 
var r = ''; 
for (var i = 0; i < menuItems.length; i++) { 
    r += function(menuObject) { 
    console.log(menuObject); 
    console.log(
     '<a class="" href="' + 
     menuObject.url + '">' + menuObject.name + '</a>' + 
     (i < menuItems.length - 1) ? sep : ""); //logs the contents of sep 
    ) //console.log expanded for readability 
    } 
} 

为什么不记录完整的字符串,而是只计算到sep

+0

你似乎已经接受了,看起来错误的答案。你确定它做了你想做的事吗? – musefan

+0

从技术上讲,措辞是正确的,而实际的代码示例是错误的。 – Alex

回答

2

因为你不包装在括号中你如果行,它是过程之前它的字符串作为条件的全部。

尝试......

var sep = '&nbsp;&nbsp;|&nbsp;&nbsp;'; 
     var r = ''; 
     for (var i=0;i<menuItems.length; i++) { 
      r += function (menuObject) { 
      console.log(menuObject); 
      console.log(
       '<a class="" href="' + 
       menuObject.url + '">' + menuObject.name + '</a>'+ 
       ((i <menuItems.length-1) ? sep : "")); //logs the contents of sep 
      } 
     } 
0

运算符优先级。把你的表达?前括号:

console.log(
     ('<a class="" href="' + 
     menuObject.url + '">' + menuObject.name + '</a>'+ 
     (i <menuItems.length-1)) ? sep : ""); 
) 
+1

呃,我不认为'' Rup

+0

-1对于不正确的评估,您正在评估字符串不为空 - 将始终为真 – musefan

2

的问题是运算符优先级。

console.log(
      ('<a class="" href="' + 
      menuObject.url + '">' + menuObject.name + '</a>'+ 
      (i <menuItems.length-1)) ? sep : ""); 

正在执行中(介意我添加的额外括号)。 (它只有很少做if条款BTW)当使用三元运算符你应该总是使用括号喜欢这里:

console.log(
      '<a class="" href="' + 
      menuObject.url + '">' + menuObject.name + '</a>'+ 
      ((i <menuItems.length-1) ? sep : ""));