【发布时间】:2012-04-25 21:08:18
【问题描述】:
我使用的是 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);
}
【问题讨论】:
-
这是正常的,它会工作得很好。一般来说,使用三元运算符时可读性很难,但在你的情况下它看起来很好。
-
嗯.... 你也可以这样做,因为它们都接受相同的参数
(IsChecked ? removeItem : addItem)($this)。但是,要回答您的问题,是的,这是正常的,使用三元运算符没有任何问题,只要它们在需要的情况下不会降低可维护性或可读性。 jsfiddle.net/vsB3f -
if($this.hasClass("IsChecked")) removeItem($this); else addItem($this)是正确的方法。三元运算符不适用于此类情况,而是用于foo(isChecked ? 'bar' : meow());之类的事情(即,当您关心您在 then/else 块中所做的任何事情的“返回值”时) -
在您的示例中,跳过第一行以支持这一点:
$(this).hasClass("IsChecked") ? removeItem($this) : addItem($this);我可以在一行上按原样理解您的代码,因此它符合我的经验法则(请参阅下面的帖子)。为我工作。
标签: javascript jquery