簡體   English   中英

邏輯運算符及其在JavaScript中的行為

[英]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)返回abc中的第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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM