Skip to content

Instantly share code, notes, and snippets.

@jswartwood
Forked from cowboy/truthy-eq-good-times.js
Created June 21, 2011 02:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jswartwood/1037100 to your computer and use it in GitHub Desktop.
Save jswartwood/1037100 to your computer and use it in GitHub Desktop.
JavaScript: See what == what!
// This should do a pretty good job of iterating through the following array
// and logging any values that == each other. Beware, this is scary stuff!
// http://benalman.com/news/2010/11/schrecklichwissen-terrible-kno/
var arr = [true, 123, {}, {a:1}, [], [0], [123], "hi", function foo(){},
/re/, false, 0, "", null, undefined, NaN];
function pretty(v) {
var s = JSON.stringify(v);
return v == null ? v + "" : s === undefined ? v : s == "null" ? "NaN" : s;
}
arr.forEach(function(v) {
var truthy = v ? "truthy" : "falsy";
var doubleNot = !!v ? "doubleTrue" : "doubleFalse";
var eq = [];
var nottyEq = [];
arr.forEach(function(w) {
if ( v == w ) { eq.push(pretty(w)); }
if ( !!v == !!w ) { nottyEq.push(pretty(w)); }
});
if ( !eq.length ) { eq.push("N/A"); }
console.log("%s (%s, %s) == %s ::: %s", pretty(v), truthy, doubleNot, eq.join(", "), nottyEq.join(", "));
});
/*
OUTPUT:
true (truthy, doubleTrue) == true ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
123 (truthy, doubleTrue) == 123, [123] ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
{} (truthy, doubleTrue) == {} ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
{"a":1} (truthy, doubleTrue) == {"a":1} ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
[] (truthy, doubleTrue) == [], false, 0, "" ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
[0] (truthy, doubleTrue) == [0], false, 0 ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
[123] (truthy, doubleTrue) == 123, [123] ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
"hi" (truthy, doubleTrue) == "hi" ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
function foo(){} (truthy, doubleTrue) == function foo(){} ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
/re/ (truthy, doubleTrue) == /re/ ::: true, 123, {}, {"a":1}, [], [0], [123], "hi", function foo(){}, /re/
false (falsy, doubleFalse) == [], [0], false, 0, "" ::: false, 0, "", null, undefined, NaN
0 (falsy, doubleFalse) == [], [0], false, 0, "" ::: false, 0, "", null, undefined, NaN
"" (falsy, doubleFalse) == [], false, 0, "" ::: false, 0, "", null, undefined, NaN
null (falsy, doubleFalse) == null, undefined ::: false, 0, "", null, undefined, NaN
undefined (falsy, doubleFalse) == null, undefined ::: false, 0, "", null, undefined, NaN
NaN (falsy, doubleFalse) == N/A ::: false, 0, "", null, undefined, NaN
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment