2

我无法理解||在 Jquery/Javascript 中执行 an 的顺序。

如果我有这个:

  someVar = $el.attr("one") || options.two || "three";

当两者都未定义时,它设置someVar为“三” 。$el.attr("one")options.two

我需要在此语句中添加另一个条件,如下所示:

  someVar = $el.attr("one") || options.two || options.extra == "true" ? undefined : "three";

所以这应该说:

如果两者都没有定义'$el.attr("one")''options.two',则检查是否'options.extra == true',如果为真,则设置为'undefined',否则设置为'three'

undefined但是,即使我设置了,我也总是得到$el.attr("one"),我不明白为什么?

谁能告诉我我的逻辑有什么问题?

谢谢!

4

3 回答 3

8

我认为你必须加上一些括号:

someVar = $el.attr("one") || options.two || (options.extra == "true" ? undefined : "three");

实际上,您自己的代码被读作:

someVar = ($el.attr("one") || options.two || options.extra == "true") ? undefined : "three";
于 2012-09-10T08:09:38.067 回答
1

原因是它? :的绑定比||最后评估的要弱。这和你写的一样:

( $el.attr("one") || options.two || options.extra == "true" ) ? undefined : "three";

这总是会产生未定义的,因为第一个表达式总是为真(因为你设置了$el.attr("one")

这就是为什么你必须采取parens来解决这个问题:

$el.attr("one") || options.two || (options.extra == "true" ? undefined : "three");

检查运算符优先级表,在这种情况下它会派上用场。

于 2012-09-10T08:14:51.093 回答
0

仅使用逻辑运算符编写它的方法是

  someVar = $el.attr("one") || options.two || options.extra != "true" && "three" || undefined;

...并不是说我会在实际代码中使用它。(我可能也不会将逻辑运算符与条件运算符混合。)

于 2012-09-10T08:59:06.550 回答