三元运算符始终评估真实部分

发布于 2024-12-07 15:43:59 字数 513 浏览 0 评论 0原文

我有一个声明:

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

I have a statement:

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
    }
}

Why is it not logging the full string, and instead only evaluating to sep?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

看春风乍起 2024-12-14 15:43:59

因为您没有将 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
            }
       }

Because you are not wrapping your if line in parenthesis and it is process all of the string before it as the condition.

Try this...

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
            }
       }
和影子一齐双人舞 2024-12-14 15:43:59

问题在于运算符优先级。

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

The issue is operator precedence.

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

is being executed (mind the extra parenthesis I added). When using the ternary operator (which has only little to do with if clauses btw.) you should always use parenthesis like here:

console.log(
            '<a class="" href="' + 
            menuObject.url + '">' + menuObject.name + '</a>'+ 
            ((i <menuItems.length-1 ) ? sep : "")); 
扶醉桌前 2024-12-14 15:43:59

运算符优先级。将表达式放在 ? 之前的括号中:

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

Operator precedence. Put your expression before ? in parentheses:

console.log(
        ('<a class="" href="' + 
        menuObject.url + '">' + menuObject.name + '</a>'+ 
        (i <menuItems.length-1 )) ? sep : "");
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文