Skip to content

Instantly share code, notes, and snippets.

@BboyAkers
Created January 5, 2020 15:09
Show Gist options
  • Save BboyAkers/ce3a9b73ebf8d7b065b8d678ae05e9e0 to your computer and use it in GitHub Desktop.
Save BboyAkers/ce3a9b73ebf8d7b065b8d678ae05e9e0 to your computer and use it in GitHub Desktop.
Exercise For Creating a Type Check Polyfill
// TODO: define polyfill for `Object.is(..)`
if(!Object.is || true) {
Object.is = function ObjectIs(x,y) {
let xNegZero = isItNegZero(x);
let yNegZero = isItNegZero(y);
if(xNegZero || yNegZero) {
return xNegZero && yNegZero;
}
else if(isItNaN(x) && isItNaN(y)){
return true;
}
else {
return x === y;
}
function isItNegZero(v) {
return v == 0 && (1/v) == -Infinity;
}
function isItNaN(v) {
//NaN is the only value that not equal to itself in JavaScript
return v !== v;
}
}
}
// tests:
console.log(Object.is(42,42) === true);
console.log(Object.is("foo","foo") === true);
console.log(Object.is(false,false) === true);
console.log(Object.is(null,null) === true);
console.log(Object.is(undefined,undefined) === true);
console.log(Object.is(NaN,NaN) === true);
console.log(Object.is(-0,-0) === true);
console.log(Object.is(0,0) === true);
console.log(Object.is(-0,0) === false);
console.log(Object.is(0,-0) === false);
console.log(Object.is(0,NaN) === false);
console.log(Object.is(NaN,0) === false);
console.log(Object.is(42,"42") === false);
console.log(Object.is("42",42) === false);
console.log(Object.is("foo","bar") === false);
console.log(Object.is(false,true) === false);
console.log(Object.is(null,undefined) === false);
console.log(Object.is(undefined,null) === false);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment