【入門編】 Object.is()メソッド – JavaScript実践ガイド

やあ、こんにちは。JavaScriptの世界へようこそ。

コードを書き始めると必ずぶつかる「比較」という壁。`==` と `===` の違いを学んだばかりの君にとって、さらにその先にある `Object.is()` というメソッドは、少し魔法のように感じるかもしれませんね。

でも、安心してください。難しく考える必要はありません。今日は、この「厳密すぎる判定役」である `Object.is()` について、僕と一緒に紐解いていきましょう。

—

なぜ「===」じゃダメなの?

普段、私たちは「同じかどうか」を確かめるために `===`(厳密等価演算子)を使いますよね。これはとても優秀な判定役です。ですが、実はこの優秀な彼にも、どうしても見抜けない「双子の見分け方」があるんです。

例えるなら、`===` は「見た目が同じなら同じものとみなす」という、大らかな性格の持ち主です。でも、現実には「形は同じだけど、実は中身が違う」というケースがありますよね。

1. 「+0」と「-0」の秘密

算数の世界では `0` はただの `0` ですが、プログラミングのメモリの世界には「プラスのゼロ」と「マイナスのゼロ」という、少しだけ性格の違うゼロが存在します。

`===` にこの二つを見せると、「どちらもゼロだよね! 同じ!」と笑顔で答えてしまいます。でも、計算の先で「マイナスのゼロ」が予想外の挙動を引き起こすことがあるんです。`Object.is()` は、この微細な違いを見逃しません。

2. 「NaN」という名の迷子

JavaScriptには `NaN`(Not a Number:数字じゃないもの)という不思議な存在がいます。計算に失敗した時などに現れるのですが、この `NaN` の一番面白いところは、「自分自身ですら、自分とは別人と判定される」というところです。

`NaN === NaN` と書いても、答えは `false` になります。まるで、「私は私だけど、あなたもNaN? いや、そんなはずはない!」と照れ屋さんがぶつかり合っているようなものです。これを正しく「同じNaNだね」と見抜けるのが、`Object.is()` の強みです。

—

実際に動かしてみよう

頭で考えるより、実際にコードを書いてみるのが一番の近道です。以下のコードをコピーして、ブラウザのコンソールやエディタで試してみてください。

// +0 と -0 の比較
console.log(+0 === -0); // true(===は区別できない)
console.log(Object.is(+0, -0)); // false(Object.isなら区別できる!)

// NaN と NaN の比較
console.log(NaN === NaN); // false(===は自分自身も見失う)
console.log(Object.is(NaN, NaN)); // true(Object.isはちゃんと見抜く)

// 普通の数値や文字列なら?
console.log(Object.is(“JavaScript”, “JavaScript”)); // true
console.log(Object.is(10, 10)); // true

どうでしょう? `Object.is()` が「本当の真実」を教えてくれる感じ、伝わりましたか?

—

いつ、使うべきなの?

「じゃあ、明日からは全部 `Object.is()` を使えばいいの?」というと、実はそうでもありません。

現場のリアルな話をすると、日常的な比較(例えば「入力された値が空文字か?」とか「数字の5と同じか?」といった判定)には、引き続き `===` を使うのが一般的です。`===` は書きやすいですし、多くの開発者が慣れ親しんでいる共通言語だからです。

`Object.is()` を引き出すのは、「どうしても厳密な区別が必要な特別なタイミング」だけで十分ですよ。

  • 計算結果の中に `NaN` が紛れ込んでいないかチェックしたい時
  • 数値の符号(プラスかマイナスか)が計算に大きく影響する複雑なロジックを書く時

こうした「ここぞ!」という場面で、そっと `Object.is()` を取り出してみてください。君のコードに、グッとプロフェッショナルな深みが出るはずです。

—

最後に:迷ったら「大丈夫」

JavaScriptを始めたばかりの頃は、こういう「微細な仕様」に出会うたびに、「自分は理解できていないんじゃないか」と不安になるかもしれません。

でも大丈夫。僕も最初はそうでした。`NaN === NaN` が `false` になると知ったとき、「嘘だろ!」と椅子から転げ落ちそうになったのを覚えています(笑)。

こうした一つひとつの「なぜ?」を大切にできる君なら、きっと素晴らしいエンジニアになれます。焦らず、楽しみながら、少しずつJavaScriptという言語の性格を掴んでいってくださいね。

またいつでも、迷った時はここに聞きに来てください。いつでも待っていますよ。

コメント

タイトルとURLをコピーしました