2017-02-28 15 views
-3

誰かが私に説明したり、次の機能がうまくいかない理由を文書で指摘できますか?&& ||を使用したロジックの場合

var x = 1; 
 
var y = 2; 
 
var z = 1; 
 

 
function logicTest() { 
 
    if ((x && y && z) === 1) { 
 
    return true; 
 
    } else { 
 
    return false; 
 
    } 
 
} 
 

 
console.log(logicTest())

私は次のように私は長い道のりを、それを入力することができることを知っている:

var x = 1; 
 
var y = 2; 
 
var z = 1; 
 

 
function logicTest() { 
 
    if (x === 1 && y === 1 && z === 1) { 
 
    return true; 
 
    } else { 
 
    return false; 
 
    } 
 
} 
 
console.log(logicTest())

しかし、私は本当に理由を理解しようとしています最初はうまくいきませんし、2番目のif/then文を入力するより良い方法があるか、それともそれは常にそうでなければならない方法です。

ありがとうございます!

+0

有効な構文でないものをすべてリストすることはできません。 – krillgar

+2

'&&'と '||'はブール演算子で動作するので、最初は整数値で操作しようとしています。 2番目のケースでは、個々の条件がブール値に解決され、そのまま動作します。 –

+1

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators – mplungjan

答えて

2

発現

((x && y && z) === 1) 

は、第(x && y && z)の評価を含みます。これを評価するために、JavaScriptは、順番に、x,y、およびzという値をテストします。左から右へとブール値に強制された場合、その値の1つがfalseである場合、評価は全体的な値としてその値(非強制)で停止します。そうでない場合、その部分式の値はzの値になります。これは&&シーケンスの最後の部分式です。 z1であるため、全体的な結果は、1であろうように、この場合

xy、及びzは、すべての非ゼロ数です。

サブタイトルのすべてのセットが同じ値に等しいかどうかをテストすることができます。あなたが見つけたように、それは明白な比較によってのみ決定できます。また、リストを作成して配列関数を使ってテストを実行することで可能なこともあります。テストする副次式が3つ以上ある場合に便利です。 ===はブール値を生成のような関係演算子を用いた試験を実施

function logicTest() { 
    if (x === 1 && y === 1 && z === 1) { 
    return true; 
    } else { 
    return false; 
    } 
} 

:文体ノートでも

、。

function logicTest() { 
    return x === 1 && y === 1 && z === 1; 
} 
+1

私はあなたがリンクすることができると思います次のドキュメントもご覧ください:http://stackoverflow.com/documentation/javascript/208/comparison-operations/828/logic-operators-with-non-boolean-values-boolean-coercion#t=201702281311439403736 – Rajesh

+0

コードを書く良い方法です。 – Phil

関連する問題