1. ホーム
  2. javascript

[解決済み] JavaScriptの&と&&の違いは何ですか?

2023-01-01 10:07:57

質問

とはどう違うのですか? &&& をJavaScriptで使うのですか?

コード例です。

var first  = 123;
var second = false;
var third  = 456;
var fourth = "abc";
var fifth  = true;
alert(first & second); // 0
alert(first & third);  // 72
alert(first & fourth); // 0
alert(first & fifth);  // 1

alert(first && second); // false
alert(first && third);  // 456
alert(first && fourth); // abc
alert(first && fifth);  // true

どうやら && は論理的な and である場合、常に 2 番目の値を返します。 true .

しかし & ?

(ちなみに && は、どうやら and をPythonでは && である。)

どのように解決するのですか?

& はビット単位のAND

この演算子は 2つの数値 を返します。 の数を返します。 数字でない場合は、数字にキャストされます。

どのように動作するのですか? ウィキペディアに答えがあります。 https://en.wikipedia.org/wiki/Bitwise_operation#AND

注意 Javascriptでは、この演算子の使い方は であり、推奨されません。 なぜなら、整数データ型がなく、浮動小数点だけだからです。したがって、浮動小数点はすべての操作の前に整数に変換され、動作が遅くなります。また、典型的なウェブアプリケーションでは実際に使用することはなく、読めないコードを生成します。

一般的なルールです。避けてください。使わないでください。 保守的で読みやすいJSのコードには、ほとんど存在しません。

&& は論理的なAND

2つの引数を期待し、返します。

  • 偽と評価される最初の項
  • そうでなければ最後の項(すべてがtrue-yの場合)

以下はその例です。

0 && false          0 (both are false-y, but 0 is the first)
true && false       false (second one is false-y)
true && true        true (both are true-y)
true && 20          20 (both are true-y)

Booleanでしか使ったことがないのであれば、これはまさに数理論理学のAND演算子です。

&& 演算子連鎖

この演算子が上記のように定義されている理由は、演算子の連鎖です。この演算子を連鎖させても、上記のルールは維持されます。

true && 20 && 0 && false        0 (it is the first false-y)
10 && 20 && true && 100         100 (last one, since all are true-y)

&& 短絡的

定義からわかるように、ある項がfalse-yであることがわかるとすぐに、次の項を気にする必要はないのです。Javascriptでは、これをさらに一歩進めて、項を評価することさえしません。これは短絡的と呼ばれています。

true && false && alert("I am quiet!")

この文は何も警告を発しないし false が返されます。そのため && 演算子を使えば、if文の短い置き換えが可能です。これらは等価です。

if (user.isLoggedIn()) alert("Hello!")
user.isLoggedIn() && alert("Hello!")

ほとんどすべてのJS圧縮器は、2バイトを節約するためにこのトリックを使用します。