【ITニュース解説】Say Goodbye to ===
2025年09月03日に「Medium」が公開したITニュース「Say Goodbye to ===」について初心者にもわかりやすいように丁寧に解説しています。
ITニュース概要
JavaScriptで値を比較する際、厳密等価演算子「===」の代わりに、よりスマートな比較方法が提案されている。新しい比較方法では、型変換の際の予期せぬ挙動を避け、より直感的で安全な比較が可能になる。これにより、バグの発生を抑制し、コードの可読性向上に繋がることが期待される。
ITニュース解説
JavaScriptにおける値の比較方法に関する記事「Say Goodbye to ===」の内容を解説する。JavaScriptでは、値が等しいかどうかを判定するために==演算子と===演算子(厳密等価演算子)が存在する。記事では、特に===演算子の代替となる、よりスマートな比較方法について考察している。
==演算子は、比較する前に必要に応じて型変換を行う。例えば、"1" == 1はtrueと評価される。これは、文字列"1"が数値1に変換されてから比較されるためだ。一方、===演算子は型変換を行わず、型と値が両方とも等しい場合にのみtrueを返す。したがって、"1" === 1はfalseとなる。この厳密さが、===演算子が推奨される理由の一つだ。
しかし、===演算子にも弱点がある。特に、NaN(Not a Number)の比較だ。NaN === NaNはfalseを返す。これは、NaNが「数ではない」ことを表す特殊な値であり、自身との比較さえも等しくないと定義されているためだ。また、Object.is()メソッドという、より厳密な比較方法も存在し、これはNaNの比較においてtrueを返す。
記事では、===演算子の代替案として、いくつかのシナリオにおけるより適切な比較方法を提案している。
-
NaNの比較:
isNaN()関数やNumber.isNaN()メソッドを使用する。isNaN(NaN)やNumber.isNaN(NaN)はtrueを返すため、NaNであるかどうかを正しく判定できる。isNaN()はグローバル関数であり、引数を数値に変換しようとするため、文字列などが渡された場合に予期せぬ結果を招くことがある。Number.isNaN()は、引数が実際に数値であり、かつNaNである場合にのみtrueを返すため、より安全に使用できる。 -
ゼロの比較: JavaScriptには、
+0と-0という2種類のゼロが存在する。===演算子では+0 === -0がtrueと評価されるが、これらを区別したい場合がある。Object.is(+0, -0)はfalseを返すため、このような場合に有用だ。 -
オブジェクトの比較:
===演算子でオブジェクトを比較する場合、参照が等しいかどうかを比較する。つまり、異なるメモリ領域に格納された同じ内容のオブジェクトはfalseと評価される。オブジェクトの内容が等しいかどうかを比較するには、自分で比較関数を実装する必要がある。オブジェクトのプロパティを一つずつ比較するか、JSON.stringify()を使用して文字列に変換してから比較する方法がある。しかし、JSON.stringify()はプロパティの順序が異なる場合に異なる文字列を生成するため、注意が必要だ。 -
文字列の比較:
===演算子は文字列の内容が等しいかどうかを比較するが、大文字小文字を区別する。大文字小文字を区別せずに比較したい場合は、toLowerCase()やtoUpperCase()メソッドを使用して、両方の文字列を同じケースに変換してから比較する必要がある。また、Unicode正規化が必要な場合もある。 -
数値の比較: 浮動小数点数の比較は、精度誤差のために注意が必要だ。
0.1 + 0.2 === 0.3はfalseとなることがある。これは、浮動小数点数の内部表現が正確ではないために発生する。このような場合は、ある程度の許容範囲(イプシロン)を設けて、差が非常に小さいかどうかを判定する必要がある。例えば、Math.abs((0.1 + 0.2) - 0.3) < 0.00001のように比較する。
記事では、これらのシナリオを考慮し、===演算子だけでなく、状況に応じて適切な比較方法を選択することが重要だと結論付けている。Object.is()メソッドや、より特化した比較関数を使いこなすことで、より正確で信頼性の高いコードを書くことができる。JavaScriptの比較演算子は奥が深く、単純な===演算子だけでは対応できないケースも存在することを理解しておく必要がある。特に、数値の比較における精度誤差や、NaNの扱いには注意が必要だ。システムエンジニアを目指す初心者は、これらの нюансы を理解し、状況に応じて適切な比較方法を選択できるようになることが重要だ。