101
Version:
common javascript utils that can be required selectively that assume es5+
37 lines (34 loc) • 781 B
JavaScript
/**
* @module 101/equals
*/
/**
* Functional implementation of Object.is with polyfill for browsers without implementations of Object.is
* @function module:101/equals
* @param {*} a - any value
* @param {*} b - any value
* @return {boolean} Object.is(a, b)
*/
module.exports = function (a, b) {
if (arguments.length === 1) {
return equals.bind(null, a);
}
else {
return equals(a, b);
}
};
function equals (v1, v2) {
if (Object.is) {
return Object.is(v1, v2);
}
else {
// ES6 Object.is polyfill
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
if (v1 === 0 && v2 === 0) {
return 1 / v1 === 1 / v2;
}
if (v1 !== v1) {
return v2 !== v2;
}
return v1 === v2;
}
}