I'd rather not do redundant comparisons.  `Object.is` does an explicit `if (a === 0) return 1 / a === 1 / b;` comparison, which then has to be repeated and reversed if you attempt to define `SameValueZero` in terms of either `SameValue` or `Object.is` as you propose.  That seems like a waste.  The current definition of `SameValueZero` follows the spec exactly, although its circuitous: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-strict-equality-comparison defines `===` and notes, "This algorithm differs from the SameValue Algorithm (7.2.3) in its treatment of signed zeroes and NaNs."  Then  http://people.mozilla.org/~jorendorff/es6-draft.html#sec-samevaluezero notes that, "SameValueZero differs from SameValue only in its treatment of +0 and -0."  If you dig, you can easily determine that `SameValueZero` matches `===` in its treatment of signed zeros, so you only need to handle the `NaN` case in order define `SameValueZero` in terms of `====`.