2011-09-30 30 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 : ""));