[解決済み] [解答】+0と-0は同じですか?
質問
を読み解く
ECMAScript 5.1仕様書
,
+0
と
-0
は区別されます。
では、なぜ
+0 === -0
と評価されます。
true
?
解決方法は?
JavaScriptは IEEE754規格 を使用して数字を表現します。から ウィキペディア :
符号付ゼロ とは、符号を伴うゼロのことです。通常の算数では、-0 = +0 = 0ですが、計算機では、2つのゼロの存在を許す数表現があり、その場合、しばしば -0 (負のゼロ) と +0(正のゼロ) . これは整数の符号付き数値表現の一部と、ほとんどの浮動小数点数表現で発生します。0 は通常 +0 として符号化されますが、+0 または -0 として表現することもできます。
浮動小数点演算のIEEE754規格(現在、浮動小数点数をサポートするほとんどのコンピュータとプログラミング言語で使用されている)では、+0と-0の両方が必要です。0は、1/-0=-∞、1/+0=+∞という拡張実数線の変形として考えることができ、0による除算は±0/±0と±∞/±∞に対してのみ不定となります。
この記事には、さまざまな表現についての詳細が書かれています。
これが、技術的に両方のゼロを区別しなければならない理由なんですね。
<ブロッククオート
しかし
+0 === -0
は真と評価されます。なぜでしょう?
この動作は、明示的に セクション11.9.6 は、その 厳密な等価比較アルゴリズム (強調は一部筆者)。
比較対象
x === y
ここでx
とy
が値であれば 真 または 虚偽 . このような比較は、以下のように行われる。(...)
Type(x)がNumberの場合、以下のようになります。
- xがNaNの場合、falseを返す。
- y が NaN の場合、false を返す。
- xがyと同じNumber値であれば、trueを返す。
- xが+0、yが-0のとき、trueを返す。
- x が -0 で y が +0 ならば真を返す。
- false を返します。
(...)
(以下、同じ)
+0 == -0
btw.)
を扱うのが論理的だと思われます。
+0
と
-0
を等しくしています。そうでなければ、コードの中でこのことを考慮しなければならず、個人的にはそんなことはしたくありません;)
注
ES2015 では、新しい比較方法が導入されました。
Object.is
.
Object.is
を明示的に区別しています。
-0
と
+0
:
Object.is(-0, +0); // false
関連
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】TypeError: Router.use() はミドルウェアの関数を要求しているが、Object を取得した。
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] (a== 1 && a ==2 && a==3) が真に評価されることはあるのでしょうか?
-
[解決済み] JSONPとは何か、なぜ作られたのか?
-
[解決済み] varキーワードの目的と、どのような場合に使用する(または省略する)べきですか?
最新
-
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 Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
Vueの要素ツリーコントロールに破線を追加する説明
-
WeChatアプレット用ユニアプリによるグローバルシェアリング
-
Vueの一般的な組み込みディレクティブの説明
-
[解決済み] テスト
-
[解決済み】TypeErrorの解決方法。未定義またはヌルをオブジェクトに変換できない
-
[解決済み】 `string.split is not a function` というエラーの原因は何ですか?
-
[解決済み】 Uncaught TypeError : undefined のプロパティ 'replace' を読み取れない In Grid
-
OSSアップロードエラーを解決する: net::ERR_SSL_PROTOCOL_ERROR
-
jq は html ページとデータを動的に分割する。