Javascript - 条件语句的检查顺序是什么

标签 javascript conditional-statements

我很想知道 Javascript 中的条件语句。我有两个例子如下:

var myObj = {};
console.log(myObj.pro != null && myObj.pro.val != null ? 0 : 1);
console.log(myObj.pro.val != null && myObj.pro != null ? 0 : 1);

第二行将打印一个值,但第三行将引发异常。条件是从左到右检查的吗?当我们在同一行中有很多条件运算符如 OR、NOT、() 和 AND 时,它是如何检查的。首先检查哪一个? 如果我误解了,请纠正我。

更新:我添加了更复杂的示例:

var !(!A || B && C && D) ? 0 : 1;

最佳答案

对于第二行 console.log(myObj.pro != null && myObj.pro.val != null ? 0 : 1);, myObj.pro计算结果为 undefined,然后将其与 null 进行比较并返回 false。我们知道,在 AND 比较中,当左侧的计算结果为 false 时,Javascript 会忽略 AND 的右侧。这种合理的行为可防止解释器遇到异常绑定(bind)的右侧代码,该代码本质上是 undefined.val

第三行继续执行并评估 undefined.val,它抛出异常并停止解释。

如果您有兴趣了解优先级,请查看 this MSDN table

关于Javascript - 条件语句的检查顺序是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53758724/

相关文章:

javascript - 在下拉列表更改时替换 URL 查询字符串值

javascript - 如何使用 jquery .load 并在原始文档中保留 javascript 功能?

javascript - 如何在不破坏垂直对齐的情况下在卡片元素上应用网格以减小浏览器大小?

javascript - JS : How to remove white spaces only from inside of string

c# - 条件属性 c#

ruby - 如果我的 case 语句的任何分支被调用,我可以设置一个变量吗?

javascript - 使用 keystone-storage-adapter-s3 后出现字段错误

typo3 - 使用 ContainsViewHelper 的流体条件

excel - 计算Excel行中的当前条纹

c - 整数上的无分支条件——很快,但它们能变得更快吗?