javascript - JS 三元运算符与 if/else

标签 javascript if-statement ternary-operator

尝试更好地理解 JavaScript。我已经在这个论坛上查看了一些类似的问题,但我仍然对这一点感到困惑。

我从网上得到了一些代码,可以切换模态窗口 (div) 和覆盖层 (div) 的可见性 - (我知道使用 jQuery 可能会更好,但我想先了解 JS):

function overlay() {
    el = document.getElementById("overlay");

    /* TERNARY */
    el.style.visibility = (el.style.visibility == "visible") ? "hidden" : "visible";

    /*
    if(el.style.visibility == "visible"){
        el.style.visibility = "hidden";
    }else if(el.style.visibility == "hidden"){
        el.style.visibility = "visible";
    }

   */   
}

我认为三元运算符只是编写 if/else 语句的一种更紧凑的方式。但是,当我用 if/else 语句(当前在代码中注释掉)替换上面代码中的三元运算符时,代码不起作用。

我可能出了什么问题,但我不明白是什么?有人可以帮忙吗?

谢谢。

最佳答案

三元运算符(更正确地称为 conditional operator )可以替换单个 if/else (只有一个比较子句),而不是 if/else-if (有两个比较)。所以

var d = (a ? b : c);

相当于:

var d;

if (a) {
    d = b;
} else {
    d = c;
}

因此,在您的情况下,相当于条件运算符的 if/else 为:

if (el.style.visibility == "visible") {
    el.style.visibility = "hidden";
} else {
    el.style.visibility = "visible";
}

同样,嵌套两个条件运算符可以产生与 if/else-if 等效的表达式:

el.style.visibility = (el.style.visibility == "visible") ? 
    "hidden" : (el.style.visibility == "hidden") ? 
    "visible" : el.style.visibility;

显然在这种情况下,如果您要进行两次比较,则 if/else-if 更具可读性,并且应该是首选。

关于javascript - JS 三元运算符与 if/else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25276124/

相关文章:

javascript - 如何在Grails中链接JavaScript Bootstrap 方法

javascript - 开放层 3 : draw arrow on multi line

javascript - 在 birt 中缩放到 "Fit All Columns on One Page"

c - 使用条件运算符时变量值如何变化?

javascript - 使用 jQuery 对象和变量

java - 当值为 true 时,是否有更快的打印 "yes"的方法?

Python数据框条件列填充

c - 获取小数分隔符后面的数字

java - 为什么三元运算符会意外转换整数?

javascript - 使用 JavaScript 三元运算符的 CSS 规则