我有一个声明:
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 :(得分:2)
因为你没有在括号中包装你的if行,而是在它之前处理所有字符串作为条件。
试试这个......
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
}
}
答案 1 :(得分:2)
问题是运营商优先。
console.log(
('<a class="" href="' +
menuObject.url + '">' + menuObject.name + '</a>'+
(i <menuItems.length-1 )) ? sep : "");
正在执行(请注意我添加的额外括号)。当使用三元运算符(它与if
子句很少有关)时,你应该总是使用这里的括号:
console.log(
'<a class="" href="' +
menuObject.url + '">' + menuObject.name + '</a>'+
((i <menuItems.length-1 ) ? sep : ""));
答案 2 :(得分:0)
运营商优先权。将表达式放在括号中的?
之前:
console.log(
('<a class="" href="' +
menuObject.url + '">' + menuObject.name + '</a>'+
(i <menuItems.length-1 )) ? sep : "");
)