SameValueアルゴリズム
2値が同値かを比較するときに使うアルゴリズム。
……英語なのでかんたんに翻訳しておきますね
xとyが値である内部比較抽象操作(SameValue(x, y))の評価値はtrueまたはfalseになります。この比較は、以下のように実行されます。
※以下の比較は「1に当てはまらなかったら2、2に当てはまらなかったら3……」というふうに考えていきます。
1. xとyの型が異なるならば、falseを返します。
2. xの型がUndefinedなら、trueを返します。
3. xの型がNullなら、trueを返します。
4. xの型がNumberなら、以下の比較を行います。
xとyがどちらもNaNなら、trueを返します。
xとyが「+0と-0」、もしくはその逆なら、falseを返します。
xとyの数値が同じなら、trueを返します。
上の3つに当てはまらなければ、falseを返します。
5. xの型がStringなら、以下の比較を行います。
xとyが全く同じ文字列なら、trueを返します。
ここで「同じ文字列」とは、「長さが同じであること」「対応する位置に対応する文字が存在すること」を両方満たす文字列同士のことです。
そうでなければ、falseを返します。
6. xの型がBooleanなら、以下の比較を行います。
xがtrueでyもtrueなら、trueを返します。
xがfalseでyもfalseなら、trueを返します。
上の2つに当てはまらなければ、falseを返します。
7. xとyが同じオブジェクトを参照していれば、trueを返します。
内容が完全に同じ複製されたオブジェクト同士の比較は当てはまらないのでfalseになります。
8. いずれにも当てはまらなければfalseを返します。
このアルゴリズムを使用する組み込みメソッド
Object.is(x, y)