JavaScript中三元条件和逻辑and运算符的运算符优先级
嘿,伙计们,我刚刚浏览了一个JS插件()的源代码,发现了以下代码行:JavaScript中三元条件和逻辑and运算符的运算符优先级,javascript,operator-precedence,Javascript,Operator Precedence,嘿,伙计们,我刚刚浏览了一个JS插件()的源代码,发现了以下代码行: return $parent && $parent.length ? $parent : $this.parent() 我不能完全理解上面这一行,我理解逻辑And(&&&)和三元条件运算符(…?…),但我似乎不理解在上面的示例中它们是如何相互作用的 现在,如果我在return语句之前添加console.log: console.log($parent && $parent.length ? $
return $parent && $parent.length ? $parent : $this.parent()
我不能完全理解上面这一行,我理解逻辑And(&&&)和三元条件运算符(…?…
),但我似乎不理解在上面的示例中它们是如何相互作用的
现在,如果我在return
语句之前添加console.log
:
console.log($parent && $parent.length ? $parent : $this.parent());
我得到:
Object { 0: <li.dropdown.open>, length: 1, prevObject: Object, context: <a.dropdown-toggle>, selector: ".parent()" }
多谢各位
*请注意,这个问题的预编辑版本有一个不正确的标题,并且在仔细阅读之前没有解释问题的真正含义,因此,请不要对下面任何似乎在讨论“短路”而不是这个问题的实际主题(操作员优先)的答案投反对票仅仅是为了避开话题和粗心
这样读吧。这两个条件都必须是真实的。在JS中,只要条件为false,&&操作数就会返回false如果
$parent
解析为“truthy”值,$parent.length
(这意味着在本例中它不是0),那么它将返回$parent
的值
如果$parent
为false(很可能为null或未定义),或者parent的长度为0,则由于JavaScript的原因,它返回$this.parent()
,您发布的表达式相当于:
return ($parent && $parent.length) ? $parent : $this.parent();
if($parent && $parent.length) {
return $parent;
}
return $this.parent();
这是由于在?:
之前对&&
运算符进行了评估。或者,您可以使用if-else
重写表达式:
if ($parent && $parent.length)
return $parent;
else
return $this.parent();
在javascript中,特别是在条件语句中,以下是正确的
if($parent) //checking whether the $parent variable has a value
您发布的条件语句是以下类型的文字
如果$parent不为null/undefined且$parent.length不为null/undefined,则返回$parent,否则返回$this.parent()
让我们再看看那句话
return $parent && $parent.length ? $parent : $this.parent();
第一个是三元算子的条件
$parent && $parent.length
这里的short-circuit操作符起作用,因为如果$parent为null/未定义,它将不会计算$parent.length(这将引发javascript异常)。如果不为null,则计算$parent.length是否为null/未定义
相同的代码可以编写为(仅为简洁起见,使用“null”)
这里,
$parent
和$this
都是JQuery对象。行$parent&&$parent.length$父项:$this.parent()
相当于:
return ($parent && $parent.length) ? $parent : $this.parent();
if($parent && $parent.length) {
return $parent;
}
return $this.parent();
因此,$parent&$parent.length
实际上被评估为:如果$parent
和$parent.length
不是null
,未定义的,0
或假的值,则返回$parent
,否则返回$this.parent()
我看待如果($parent)的方式
是“检查$parent是真实的还是虚假的”。
if($parent && $parent.length) {
return $parent;
}
return $this.parent();