如何缩短jQuery的条件语句if-else语法?

11
我使用了很多这种东西:
$text = $menu.jqmData('menu-text') ? 
           $menu.jqmData('menu-text') : self.options.menuTxt;

这已经是“速记”语法了,但我想知道是否可以进一步简化上面的代码行。肯定有比检查$menu.jqmData('menu-text')然后再写整个东西更好的方法。不是吗?

感谢您的帮助!

1个回答

21

更短的方法是使用双竖线。它基本上在第一个值为falsy时使用第二个值。

$text = $menu.jqmData('menu-text') || self.options.menuTxt;

你还可以在同一行中多次使用它。假设你有一个变量uberMenuTxt,它比其他两个优先级更高,你可以这样做。

$text = uberMenuTxt || $menu.jqmData('menu-text') || self.options.menuTxt;

这基本上是在当前值为falsy时不断进行,并且会在第一个非的值处停止。


4
是的,这就是 ||(或)运算符的工作方式。如果第一个语句返回 true,则后面的语句都不再被执行。 - GNi33
@Christoph 这并不完全正确,"0"是一个真值。然而 0""(空字符串)是假值,因此会产生错误的结果。这就是为什么这种“模拟”if-else条件的方法不是很推荐的原因。 - Christoph
@frequent 鉴于我上面提到的原因,你应该非常谨慎地使用这个。 - Christoph
@Christoph - 我必须承认,我大多数时候都使用长版本,因为如果不这样做,我经常会得到奇怪的结果。 - frequent
2
@frequent 你可以在这里阅读更多关于此的内容:http://www.sitepoint.com/javascript-truthy-falsy/,以了解为什么有时会得到奇怪的结果。 - Christoph
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接