首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用函数的JavaScript三元运算符示例

使用函数的JavaScript三元运算符示例
EN

Stack Overflow用户
提问于 2012-04-26 05:08:18
回答 6查看 161.6K关注 0票数 96

我使用的是jQuery 1.7.1

我刚刚开始使用JavaScript三元运算符来替换简单的if/else语句。我已经在几个地方成功地做到了这一点。当我认为肯定不会成功地让其他东西工作时,我很惊讶,但我还是尝试了。

以下是原始语句:

代码语言:javascript
复制
function updateItem() {
    $this = $(this);
    var IsChecked = $this.hasClass("IsChecked");
    if (IsChecked == true){
        removeItem($this);
    } else {
        addItem($this);
    }
}

下面是使用三元运算符的相同函数:

代码语言:javascript
复制
function updateItem() {
    $this = $(this);
    var IsChecked = $this.hasClass("IsChecked");
    (IsChecked == true) ? removeItem($this) : addItem($this);
}

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

代码语言:javascript
复制
x = (1 < 2) ? true : false;

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

更新--感谢您的“真实世界”建议!

我使用这个作为我的函数:

代码语言:javascript
复制
function updateItem() {
    $this = $(this);
    $this.hasClass("IsChecked") ? removeItem($this) : addItem($this);
}
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-04-26 05:17:11

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

代码语言:javascript
复制
x = (1 < 2) ? true : false;

在这里使用三元是完全不必要的--你可以简单地写成

代码语言:javascript
复制
x = (1 < 2);

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

代码语言:javascript
复制
(IsChecked == true) ? removeItem($this) : addItem($this);

简单地说:

代码语言:javascript
复制
(IsChecked) ? removeItem($this) : addItem($this);

实际上,我还会删除IsChecked临时代码,这样就只剩下:

代码语言:javascript
复制
($this.hasClass("IsChecked")) ? removeItem($this) : addItem($this);

至于这是否是可接受的语法,它肯定是可接受的!这是一种很好的方法,可以将四行代码减少到一行,而不会影响可读性。我要给你的唯一的建议是避免在同一行上嵌套多个三元语句(那样会让人发疯!)

票数 195
EN

Stack Overflow用户

发布于 2012-04-26 05:22:20

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

几乎所有内容都使用完整的if/then/else格式。如果你在每个分支中有更大的代码块,你有一个多分支的if/else树,或者在一个很长的字符串中有多个else/ if,那么它就特别流行。

当你根据一个简单的条件给一个变量赋值,或者你在做多个决策,结果非常简短时,三元运算符是很常见的。您引用的示例实际上没有任何意义,因为表达式将在没有任何额外逻辑的情况下计算为两个值中的一个。

好主意:

代码语言:javascript
复制
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
{
    ...

不太好的地方:

代码语言:javascript
复制
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;
}

一条非常基本的经验法则--你能在一行中理解整个事情甚至更好吗?三元是可以的。否则,将其展开。

票数 24
EN

Stack Overflow用户

发布于 2016-05-17 16:51:31

我也想从我这里补充一些东西。

使用三元运算符调用函数的其他可能语法为:

代码语言:javascript
复制
(condition ? fn1 : fn2)();

如果您必须将相同的参数列表传递给两个函数,那么它会很方便,因此您只需编写一次。

代码语言:javascript
复制
(condition ? fn1 : fn2)(arg1, arg2, arg3, arg4, arg5);

您甚至可以对成员函数名使用三元运算符,我个人非常喜欢这一点,以节省空间:

代码语言:javascript
复制
$('.some-element')[showThisElement ? 'addClass' : 'removeClass']('visible');

代码语言:javascript
复制
$('.some-element')[(showThisElement ? 'add' : 'remove') + 'Class']('visible');

另一个例子:

代码语言:javascript
复制
var addToEnd = true; //or false
var list = [1,2,3,4];
list[addToEnd ? 'push' : 'unshift'](5);
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10323829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档