Created
January 5, 2020 15:09
-
-
Save BboyAkers/ce3a9b73ebf8d7b065b8d678ae05e9e0 to your computer and use it in GitHub Desktop.
Exercise For Creating a Type Check Polyfill
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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