javascript - JavaScript 中三元条件运算符和逻辑与运算符的运算符优先级

标签 javascript operator-precedence

大家好,我刚刚浏览了一个 JS 插件的源代码 (dropdown.js),并遇到了以下代码行:

return $parent && $parent.length ? $parent : $this.parent()

我无法完全掌握上面这行,我理解逻辑与 (&&) 和三元条件运算符 (... ? ... : ...),但我不在上面的例子中似乎理解它们是如何相互作用的。

现在,如果我在 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()" }

这确实是 $this.parent()

此外,在我的例子中,$parent 的计算结果为 false

所以这些是我的乐高积木,有人可以帮我把它放好并给我一个清晰的图片来说明它是如何工作的吗:

return $parent && $parent.length ? $parent : $this.parent()

谢谢。


*请注意,这个问题的预编辑版本有一个不正确的标题,并且在仔细阅读之前没有解释问题的真正含义,因此请不要对下面可能看起来的任何答案投反对票谈论“短路”来代替这个问题的实际主题(运算符优先级),仅仅是为了看起来离题和粗心

最佳答案

由于 JavaScript 的 operator precedence ,您发布的表达式等效于:

return ($parent && $parent.length) ? $parent : $this.parent();

这是由于 && 运算符在 ?: 之前被求值。或者,您可以使用 if else 重写表达式:

if ($parent && $parent.length)
    return $parent;
else
    return $this.parent();

关于javascript - JavaScript 中三元条件运算符和逻辑与运算符的运算符优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29507514/

相关文章:

javascript - Node JS : Allow only server side calls to my api

javascript - 下载脚本生成的html

javascript - 如何在向上滚动和向下滚动事件上运行一次函数?

javascript - AngularJS - 根据所选项目从 JSON 更改 google map 指令的范围

regex - 如何使用 Perl 从路径中提取文件名?

c++ - 按指定的顺序迭代元组的元素

android - 在 Android gradle 构建中强制执行库的优先级

c - 为什么这些构造使用增量前和增量后未定义的行为?

javascript - 在 JavaScript 中获取当前键盘布局语言

css - 您可以在加载时更改 css 类优先级吗?