[解決済み] JavaScriptの&と&&の違いは何ですか?
質問
とはどう違うのですか?
&
と
&&
を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バイトを節約するためにこのトリックを使用します。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み】JavaScriptの比較では、どちらの等号演算子(== vs ===)を使うべきですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] BlobからArrayBufferへ移行する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] 文字列がすべて同じ部分文字列で構成されているかどうかを調べるにはどうすればよいですか?
-
[解決済み] Chart.jsを使ってドーナツチャートの中にテキストを追加するには?
-
[解決済み] WebStormで未解決の変数が大量にある場合の警告に対処する方法は?
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] JavaScriptで:hoverのCSSプロパティを変更する
-
[解決済み] JavaScriptのtoString()関数をオーバーライドして、デバッグ用に意味のある出力を提供することは可能でしょうか?
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] JSHintの'+'前の改行不良の説明
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行