[解決済み] (NaN != NaN)と(NaN !== NaN)の違いは何ですか?
質問
まず最初に、私はどのように知っているかを述べたいと思います。
isNaN()
と
Number.isNaN()
の作業を行います。私は、次のように読んでいます。
決定版ガイド
であるかどうかを確認する方法を示しています。
NaN
:
x !== x
この結果
true
もし
x
は
NaN
.
しかし、ここで疑問が生じます。なぜ彼は厳密な比較を行っているのでしょうか?というのも、どうやら
x != x
は同じように動作します。両方のバージョンを使っても大丈夫なのか、それともJavaScriptの中で
true
に対して
x !== x
と
false
に対して
x != x
?
解決方法は?
まず最初に、以下のことを指摘します。
NaN
は非常に特殊な値です。定義上、それ自身とは等しくない。これはJavaScriptの数値が準拠しているIEEE-754規格に由来しています。ビットが完全に一致する場合でも、quot;not a number" 値はそれ自身と等しくなることはありません。(IEEE-754では必ずしもそうではなく、複数の異なるnot a number"値を許容しています)。JavaScriptの他のすべての値はそれ自身と等しいのです。
NaN
が特殊なだけです。
...私は、JavaScriptでx !== xに対してtrueを、x != xに対してfalseを返すような値を見逃しているのでしょうか?
いいえ、そんなことはありません。唯一の違いは
!==
と
!=
というのは、後者はオペランドの型を同じにするために、必要に応じて型強制を行うからです。で
x != x
と同じであり、オペランドの型は同じである。
x !== x
.
の定義の冒頭から明らかです。 抽象的等値演算 :
- ReturnIfAbrupt(x)です。
- ReturnIfAbrupt(y)。
Type(x)がType(y)と同じであれば
厳密な等価比較 x === y の実行結果を返します。
...
最初の2ステップは、基本的な配管工事です。ですから実質的には一番最初のステップである
==
は、型が同じかどうかを確認し、同じなら
===
の代わりに
!=
と
!==
は、その否定版に過ぎない。
ということは、フラナガンが正しいのであれば、唯一の
NaN
が真になります。
x !== x
のみであることも確かである。
NaN
に対して真を与えます。
x != x
.
多くのJavaScriptプログラマは、デフォルトで
===
と
!==
を使うことで、緩い演算子による型強制の落とし穴を回避することができます。
関連
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] JavaScriptのnullとundefinedの違いは何ですか?
-
[解決済み】JavaScript版sleep()とは?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
vue3レスポンシブ対応のためのsetup+ref+reactive
-
JSアレイループと効率解析の比較
-
vueはopenlayersを使用してスカイマップとガオードマップをロードする
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】JavaScript TypeError: null のプロパティ 'style' を読み取ることができない
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】ExpressJS - throw er Unhandled errorイベント
-
[解決済み】(Google Map API) Geocodeは以下の理由で成功しませんでした。REQUEST_DENIED
-
Uncaught TypeError: null のプロパティ 'offsetHeight' を読み取れませんでした。
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules