等価と等値の意味をちゃんとできていなかったので整理。
項目 | 説明 |
---|---|
等値 | 同一のオブジェクトであること(同じアドレス値を指している) |
等価 | 意味的に同じであること |
ちゃんと理解できていなかったのは、厳密等価演算子と等価演算子の使い方を勘違いしていたため 😓
厳密等価演算子で『等価』、等価演算子で『等値』と勘違いしていました 😅 厳密等価演算子は、等価演算子による暗黙の型変換を避けるために用いるもの、つまり、検査する際に型変換するかしないかを指定しているだけでした。
オブジェクトが等値であることを比較するには少し工夫が必要で、JSON.stringify() を使うとよさそう:
const ObjectA = { id: 1, text: "foo" }; const ObjectB = { id: 1, text: "foo" }; const ObjectC = ObjectA; console.log(ObjectA === ObjectA); // true(同一オブジェクト) console.log(ObjectA === ObjectB); // false(同一オブジェクトでない) console.log(ObjectA === ObjectC); // true(同一オブジェクト) console.log(JSON.stringify(ObjectA) === JSON.stringify(ObjectB)); // true(JSON文字列(プリミティブ)として等値))
JSON.stringify()
の戻り値は JSON 文字列のプリミティブとなるので意味的に同じか判断できると思われる