[解決済み] なぜ `null >= 0 && null <= 0` ではなく `null == 0` なのですか?
質問
ある変数の型が以下の場合、その値を1だけ増加させるルーチンを書かなければなりませんでした。
number
で、そうでない場合は 0 を代入する。ここで、変数は初期状態で
null
または
undefined
.
最初の実装は
v >= 0 ? v += 1 : v = 0
というのは、数字でないものは算術式を偽にすると思ったからですが、それは間違いでした。
null >= 0
はtrueと評価される。そこで、私は
null
は0と同じように振る舞い、以下の式はすべて真と評価されます。
-
null >= 0 && null <= 0
-
!(null < 0 || null > 0)
-
null + 1 === 1
-
1 / null === Infinity
-
Math.pow(42, null) === 1
もちろんです。
null
は0ではありません。
null == 0
は偽と評価されます。このため、一見トートロジーに見える式である
(v >= 0 && v <= 0) === (v == 0)
を偽る。
なぜ
null
は0ではありませんが、0と同じですか?
どのように解決するのですか?
というのが本当のご質問のようです。
なぜだ。
null >= 0; // true
でも
null == 0; // false
実際に起こるのは
大なり小なり演算子
(
>=
)、型強制(
ToPrimitive
) を使って
ヒント
タイプ
Number
しかし、実際にはすべての関係演算子がこのような動作をします。
null
は特別な方法で扱われます。
イコール演算子
(
==
). ブリーフの中では、ただ
強要
になります。
undefined
:
null == null; // true
null == undefined; // true
のような値です。
false
,
''
,
'0'
および
[]
が数値型強制の対象となる場合、すべて0に強制される。
この処理の内部詳細については 抽象的な等価比較のアルゴリズム と 抽象的な関係比較のアルゴリズム .
まとめると
-
関係比較:両方の値がString型でない場合。
ToNumber
が両方に対して呼び出されます。これは+
を前に置くと、NULLの場合、それは0
. -
等価比較:呼び出しのみ
ToNumber
文字列、数値、ブール値の場合。
関連
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptでNULL、未定義、空白の変数をチェックする標準的な関数はありますか?
-
[解決済み] 変数が「未定義」または「NULL」であるかどうかを判断するにはどうすればよいですか?
-
[解決済み] instanceofを呼び出す前にnullチェックは必要ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] と'is'のどちらかを使って文字列を比較すると、異なる結果になることがあるのはなぜですか?
-
[解決済み] JavaScriptでNULL値をチェックするにはどうしたらいいですか?
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
JavaScriptの配列共通メソッド解説
-
Vueのイベント処理とイベントモディファイアの解説
-
[解決済み】React - uncaught TypeError: 未定義のプロパティ 'setState' を読み取れない
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み】GETできない / Nodejsエラー
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み】「X-Frame-Options」を「SAMEORIGIN」に設定したため、フレームでの表示を拒否された。
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
JavaScriptのgetElementById()メソッド入門