JavaScript 中的短路评估

Posted by cl9000 on May 07, 2020

一个人的价值,应该看他贡献什么,而不应当看他取得什么。 ——<阿尔伯特·爱因斯坦>

短路评估表明,仅当第一个参数不足以确定表达式的值时,才执行或评估第二个参数:当 AND(&&) 函数的第一个参数评估为false时,总值必须为false;否则,该值必须为false。并且当OR(||)函数的第一个参数的计算结果为true时,总值必须为true

对于以下test条件isTrueisFalse功能。

1
2
3
4
5
6
7
var test = true;
var isTrue = function(){
console.log('Test is true.');
};
var isFalse = function(){
console.log('Test is false.');
};

使用逻辑AND- &&。

1
2
3
4
5
6
7
// A normal if statement.
if(test){
isTrue(); // Test is true
}

// Above can be done using '&&' as -
( test && isTrue() ); // Test is true

使用逻辑OR- ||。

1
2
3
4
5
6
test = false;
if(!test){
isFalse(); // Test is false.
}

( test || isFalse()); // Test is false.

逻辑OR也可以用于为函数参数设置默认值。

1
2
3
4
5
6
function theSameOldFoo(name){ 
name = name || 'Bar' ;
console.log("My best friend's name is " + name);
}
theSameOldFoo(); // My best friend's name is Bar
theSameOldFoo('Bhaskar'); // My best friend's name is Bhaskar

使用undefined属性时,可以使用逻辑AND来避免异常。例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
var dog = { 
bark: function(){
console.log('Woof Woof');
}
};

// Calling dog.bark();
dog.bark(); // Woof Woof.

// But if dog is not defined, dog.bark() will raise an error "Cannot read property 'bark' of undefined."
// To prevent this, we can use &&.

dog&&dog.bark(); // This will only call dog.bark(), if dog is defined.

参考

关注【公众号】,了解更多。



支付宝打赏 微信打赏

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!