JS.next

JavaScriptの最新実装情報を追うブログ

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