3

HelloWorldattribute に文字列を含むオブジェクトがありますhello。2 つの文字列をチェックして、どちらとも一致しない場合は、特定のコードを実行したいと考えています。

var item = { hello: "HelloWorld" }
item.hello !== "HelloWorld" && item.hello !== "GoodbyeWorld" // false, correct

ただし、これを最適化して読みやすくすることができると思います。

item.hello !== ("GoodbyeWorld" && "HelloWorld") // false, correct
item.hello !== ("HelloWorld" && "GoodbyeWorld") // true   WTF?

両方のチェックが間違っていると思っていましたが、確かに何かが欠けています。JavaScript の AND/OR 演算子を正しく理解していないか、括弧の使い方が間違っていると思います。誰でも説明できますか?

JSFiddle の例

4

4 に答える 4

1

いいえ、そのように式を最適化することはできません。あなたがしているのは、文字列の 1 つを削除することであり、比較の 1 つだけを行っています。

&& 演算子は短絡評価を使用します。つまり、最初のオペランドが true の場合、2 番目のオペランドのみが返されます。

したがって、コードが行っていることは、hello プロパティの値を文字列の 2 番目の値と比較することであり、得られる結果を説明しています。

于 2013-09-30T08:01:22.360 に答える
1
item.hello !== "HelloWorld" && item.hello !== "GoodbyeWorld"

がおよび とitem.hello異なるかどうかをテストする適切な方法です。"HelloWorld""GoodbyeWorld"

A && BJavaScriptの式は、Aまたはのいずれかの結果を生成し、その結果Bがあなたの と比較されますitem.hello

于 2013-09-30T07:57:10.717 に答える