假设我有以下非常简单的代码块:
<script>
function hasVal(field) {
console.log(field);
var ret = false;
return ret;
}
if(hasVal('#field1') && hasVal('#field2')) {
console.log('here');
}else {
console.log('there');
}
</script>
Run Code Online (Sandbox Code Playgroud)
我期待它输出以下内容:
#field1
#field2
there
Run Code Online (Sandbox Code Playgroud)
实际输出的是:
#field1
there
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下这里发生了什么吗?
if一旦Javascript false从第一个函数调用返回,它是否会停止评估其余的语句?
在&&与||运营商有什么有时也被称为短路行为,所以是的,评价&&停止只要一个操作数false.
同样,||只要操作数是,就完成评估true.
这通常是一个巨大的好处,你作为一个程序员,但也有极少数情况下(其中大部分承担显著代码味道,就像在你的榜样副作用),当你想完整的评估.对于您可以使用普通布尔&和|,或者明确地分解你的表达成单独的语句.
它是如此好的原因可以在极其常见的情况下看到,null在访问财产之前必须检查某些东西是否(或以其他方式不可用):
if (something != null && something.whatever == 17) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果&&总是要评估表达的两个方面,那个成语就不会起作用,而我们作为软件开发人员的生活将更加地狱般.
| 归档时间: |
|
| 查看次数: |
49 次 |
| 最近记录: |