带有函数的JavaScript三元操作符示例

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (44)

我正在使用jQuery 1.7.1

以下是最初的声明:

function updateItem() {
    $this = $(this);
    var IsChecked = $this.hasClass("IsChecked");
    if (IsChecked == true){
        removeItem($this);
    } else {
        addItem($this);
    }
}

下面是使用三元操作符的相同函数:

function updateItem() {
    $this = $(this);
    var IsChecked = $this.hasClass("IsChecked");
    (IsChecked == true) ? removeItem($this) : addItem($this);
}

我很惊讶,因为我看到的所有示例都只是设置了这样的变量:

x = (1 < 2) ? true : false;

我的问题是,这是否是“正常”使用,它在大多数版本的JavaScript中会起作用吗?它会在哪里失败?还有其他不太明显的用途吗?

我将此作为我的功能:

function updateItem() {
    $this = $(this);
    $this.hasClass("IsChecked") ? removeItem($this) : addItem($this);
}
提问于
用户回答回答于

呵呵,在你的问题中有一些非常令人兴奋的三元语法用法,我最喜欢最后一个

x = (1 < 2) ? true : false;

这里的三元用法是完全没有意义的--你可以简单地写

x = (1 < 2);

同样,三元语句的条件元素总是作为布尔值计算,因此可以表示:

(IsChecked == true) ? removeItem($this) : addItem($this);

简单地说是:

(IsChecked) ? removeItem($this) : addItem($this);

事实上,我也会删除IsChecked也是临时的,留给你的是:

($this.hasClass("IsChecked")) ? removeItem($this) : addItem($this);

至于这是否是可接受的语法,它肯定是!这是一种很好的方法,可以在不影响可读性的情况下将四行代码缩减为一行。我要给你的唯一忠告是避免在同一条线上嵌套多个三元语句(这样的方式是疯狂的!)

用户回答回答于

三元样式通常用于节省空间。在语义上,它们是相同的。我更喜欢使用完整的if/so/etc语法,因为我不喜欢牺牲可读性

完整的if/so/etc格式用于几乎所有的东西。如果你在每个分支中进入更大的代码块,则会有一个多分支的if/Else树,或者在一个长字符串中有多个Other/ifs,则特别流行。

当你根据简单的条件为变量赋值或作出多个决策时,三元操作符是常见的,其结果非常简短。你引用的示例实际上没有意义,因为表达式将计算为两个值中的一个,而不需要任何额外的逻辑。

好方法

this > that ? alert(this) : alert(that);  //nice and short, little loss of meaning

if(expression)  //longer blocks but organized and can be grasped by humans
{
    //35 lines of code here
}
else if (something_else)
{
    //40 more lines here
}
else if (another_one)  /etc, etc
{
    ...

不太好的方法:

this > that ? testFucntion() ? thirdFunction() ? imlost() : whathappuh() : lostinsyntax() : thisisprobablybrokennow() ? //I'm lost in my own (awful) example by now.
//Not complete... or for average humans to read.

if(this != that)  //Ternary would be done by now
{
    x = this;
}
else
}
    x = this + 2;
}

扫码关注云+社区

领取腾讯云代金券