[英]Logical operators and their behavior in JavaScript
為什么會失敗?
我讀這段代碼的方式是“如果a或b或c等於3,則該陳述為真”。 但顯然JavaScript對此表示反對。 為什么?
function test() {
var a = 'one';
var b = 'two';
var c = 'three';
return ( ( a || b || c ) === 'three' );
}
編輯:知道我需要分別評估每個表達式的事實,但是正在尋找一種更快的方式編寫它。 任何建議都將受到歡迎。
您對代碼的讀取不正確。 轉換為其他形式:
if (a) {
return a === "three";
}
if (b) {
return b === "three";
}
if (c) {
return c === "three";
}
子表達式(a || b || c)
返回a
, b
或c
中的第a
,而不是“ falsy”。 那是a
,因為它的值是"one"
,所以這是與"three"
相比較的整體價值。
表達式( a || b || c )
會以先到先得的原則返回任何真實的信息。 這里a
是真實的,因此被使用。 如果a
為假,則將使用b
。 如果也是假的 ,將使用c
。
因此,由於字符串被認為是true ,所以您最終總是比較"one" == "three"
。 在這種情況下,您可以使用Array.some
,用您的語言執行您想要的或您希望的行為
“如果a或b或c等於3,則該陳述為真”
return [a,b,c].some(function(str){
return str == "three";
});
這等於字符串的等價於“三”的a,b或c(對或錯)。 這將永遠是錯誤的。 為了實現您想要的,您需要
return (a === 'three') || (b === 'three') || (c === 'three');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.