2016-09-09 5 views
-1

私は論理的な条件で同じミスを犯しています。私は何かの条件something is notまたはother something is not私が間違っている、これを書くために起こったいとき:論理条件が間違っています

if(el.type !== 'hidden' || !el.disabled) { 
    el.value = ''; 
} 

をそれはこのよう

if(false === (el.type === 'hidden' || el.disabled)) { 
    el.value = ''; 
} 

する必要があります私は思う:私は、ときにそのタイプの要素の値をクリアしたいです隠されていないか、無効になっていません... - 英語のプログラミング言語で書いておくと、状態が悪くなります。

この論理的な問題について、私はどのように考えるべきですか?

+0

真理値表を作成し、表と一致する演算子を使用しますか? – JETM

+0

あなたが望むもののように見えるのは 'if(el.type!== 'hidden' &&!el.disabled){'であり、それについて自然に逐次的に考える方法と一致します。 –

+1

考えてみましょう - 要素の種類が隠されていないときにifステートメントをtrueにし、要素が無効にならないようにします。 – JJJ

答えて

2

英語のセマンティクスとロジック演算子の間には小さなギャップがあります。 「エルが隠されていない、または無効になっていない」と言うとき、JavaScriptは「エルが隠されていない」または「エルがディスエーブルされている」と解釈しますが、最も適切な解釈では「隠された」または「無効」の周りに精神的なカッコがあります。あなたはそれを最も直接的な方法で書いています。

あなたが「されていない場合:(要素が隠されている、または要素が無効になっている。)」のような第2のバージョンのことを考えてする必要があることではない平易な英語だし、あなたは常にあなたのロジックビットをうまくする必要があります。タイピングを節約するために、あなたは単に書くことができます。

if (!(el.type === 'hidden' || el.disabled)) 

(コメントは指摘しているよう)両方の比較では、「AND」、と否定して、それを書くのが正しいやり方もあります。時には、私はどちらか一方が精神モデルをより速く適合させ、大きな真偽ブロックを修正することを発見します。

これらの状況を考えるときに留意すべきことの1つは、ネゲートしたり、チェックをその逆にする(たとえば、それを自分自身の "else"条件に変えたい)場合です。 「OR」を「AND」に、またはその逆にします。

if (!a && !b) { 
// negated: 
if (a || b) 
+0

許してくれてありがとう! :) – Marecky

+0

@ Katana314 - 良い答え - しかし、英語の意味論と論理演算子の間には巨大なギャップがあることを示唆しています。 'and'と 'or'を使用することについては、普通の言葉は非常にうっすらではありません。ロンドンとパリですべてのビジネスを見つけてください。あなたの上司は言うでしょう。彼女はそれが意味するものではないと理解していません(彼女が 'ロンドンとパリの両方を指定しない限り - 理解するタイプとして、私たちはロンドンORパリを使用するSQLに再解釈します。違いを知っている。 –

関連する問題