ES2015では何が同値とみなされるか まとめ
概要
ES2015で導入されるObject.isとCollectionのkeyにおいて、何が「同じ」と見なされるのかをまとめてみる。
Object.is
Object.isでは、以下の2点を除き『 === 』演算子と同様に評価される。
・NaNとNaNは同値とみなされる
・+0 と -0 は特別に区別される
NaN === NaN // false Object.is(NaN, NaN) // true +0 === -0 // true Object.is(+0, -0) // false
Collectionのkey
MapやSetのkeyでは、以下の2点を除き『 === 』演算子と同様に評価される。
・NaNとNaNは同値とみなされる
・-0 はコレクションに加えられる時 +0 として扱われる
m = new Map m.set(NaN, 'ナン') m.set(-0, 'マイゼロ') // keyは+0として扱われる m.has(NaN) // true m.get(+0) // "マイゼロ" m.get(-0) // "マイゼロ" m.forEach(function (value, key) { console.log(key) }) // +0