我使用的是jQuery 1.7.1
我刚刚开始使用JavaScript三元运算符来替换简单的if/else语句。我已经在几个地方成功地做到了这一点。当我认为肯定不会成功地让其他东西工作时,我很惊讶,但我还是尝试了。
以下是原始语句:
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);
}
发布于 2012-04-26 05:17:11
嘿,在你的问题中有一些非常令人兴奋的三元语法用法;我最喜欢最后一个……
x = (1 < 2) ? true : false;
在这里使用三元是完全不必要的--你可以简单地写成
x = (1 < 2);
同样,三元语句的condition元素总是作为布尔值进行计算,因此您可以表示:
(IsChecked == true) ? removeItem($this) : addItem($this);
简单地说:
(IsChecked) ? removeItem($this) : addItem($this);
实际上,我还会删除IsChecked
临时代码,这样就只剩下:
($this.hasClass("IsChecked")) ? removeItem($this) : addItem($this);
至于这是否是可接受的语法,它肯定是可接受的!这是一种很好的方法,可以将四行代码减少到一行,而不会影响可读性。我要给你的唯一的建议是避免在同一行上嵌套多个三元语句(那样会让人发疯!)
发布于 2012-04-26 05:22:20
三元样式通常用于节省空间。在语义上,它们是相同的。我更喜欢使用完整的if/then/else语法,因为我不喜欢牺牲可读性--我是老派,我更喜欢大括号。
几乎所有内容都使用完整的if/then/else格式。如果你在每个分支中有更大的代码块,你有一个多分支的if/else树,或者在一个很长的字符串中有多个else/ if,那么它就特别流行。
当你根据一个简单的条件给一个变量赋值,或者你在做多个决策,结果非常简短时,三元运算符是很常见的。您引用的示例实际上没有任何意义,因为表达式将在没有任何额外逻辑的情况下计算为两个值中的一个。
好主意:
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;
}
一条非常基本的经验法则--你能在一行中理解整个事情甚至更好吗?三元是可以的。否则,将其展开。
发布于 2016-05-17 16:51:31
我也想从我这里补充一些东西。
使用三元运算符调用函数的其他可能语法为:
(condition ? fn1 : fn2)();
如果您必须将相同的参数列表传递给两个函数,那么它会很方便,因此您只需编写一次。
(condition ? fn1 : fn2)(arg1, arg2, arg3, arg4, arg5);
您甚至可以对成员函数名使用三元运算符,我个人非常喜欢这一点,以节省空间:
$('.some-element')[showThisElement ? 'addClass' : 'removeClass']('visible');
或
$('.some-element')[(showThisElement ? 'add' : 'remove') + 'Class']('visible');
另一个例子:
var addToEnd = true; //or false
var list = [1,2,3,4];
list[addToEnd ? 'push' : 'unshift'](5);
https://stackoverflow.com/questions/10323829
复制相似问题