はじめに
typescriptでデータ比較したいときにやらかしたので等価演算子についてアウトプットします。
当たり前だろって部分だと思いますが、一瞬戸惑ったのでサッと書きますw
等価演算子 == ===
等価演算子って==
,===
これになると思いますが、新人エンジニアらしい?ミスをしましたので共有しておきます。
皆さんご存じだと思いますが=
は代入ですw
if文こんな感じに書くこと多くてスッと頭から抜け落ちてしまいましたが、新人エンジニアらしいミスとして=
を等価演算子だと思ってしまってました。w(言い訳をするならこの瞬間だけ抜けていた...(・・?))
なので一度等価演算子を調べ直したいと思います。そのアウトプットです。
if(hoge){
a = 1
b = 1
}
==
は2つの変数の型を変換して比較を行う。
===
は型を変換しないで厳密に比較を行う。
console.log(5 == "5"); // true
console.log(5 === "5"); // false
なので上記ではNumber型とstring型の型が違うため==
では比較を行う前に文字列を数値に変換してくれています。
一方===
は型変換を行わないのでエラーとなるわけです。
等価 ==
厳密等価
もっと詳しく知りたい方はこちらでしっかり書いてあります。
ちなみに...これらのサイトで出てくるオペランドとは、数式を構成する要素のうち、演算の対象となる値や変数、定数などのことです。
構造の比較
==
,===
は2つのオブジェクトを比較したい場合は使えませんのでご注意ください。
その際はdeep-equalというものを使うようです。
import * as deepEqual from "deep-equal";
console.log(deepEqual({a:123},{a:123})); // True
最後に
自分の認識としては==
,===
は=が多い方が厳しく比較するんだろうなぁぐらいでしたので等価演算子調べ直せてとても良かった
きっかけは=
で困惑したことでしたが等価演算子について深く知ることができました!!