This is a growing collection of some JavaScript idiosyncrasies, and a few things that might not be well recognized so I want to make aware.
Some of these are just to confuse the reader, and by no means encourage best practices and should never be seen in production code. It's simply to demonstrate the good and bad parts of JavaScript.
Q. What's the result?
(function() {
var foo = new Object();
var bar = new Object();
var map = new Object();
map[foo] = 'foo';
map[bar] = 'bar';
return map[foo];
})();
A.
"bar"
Q. What's the result?
function f() {
return 'foo';
}
(function() {
if (1 === 0) {
function f() {
return 'bar';
}
}
return f();
})();
A.
"bar"
Q. What's the result?
(function() {
return NaN === NaN;
})();
A.
false
Q. What's the result?
(function() {
function foo() {
return 'a';
}
return foo();
function foo() {
return 'b';
}
})();
A.
"b"
Q. What's the result?
(function(limit) {
for (var i = 0; i < limit; i++) {
setTimeout(function() {
console.log(i);
}, 0);
}
})(3);
A.
3
3
3
Q. What's the result?
(function(a, b) {
arguments[1] = 3;
return b;
})(1, 2);
A.
3
Q. What's the result?
(function(a, b, c) {
delete arguments[0];
return arguments.length;
})(1, 2, 3);
A.
3
Q. What's the result?
(function() {
return (function (a, b) {}).length;
})();
A.
2
Q. What's the result?
(function(a, b) {
var foo, bar;
foo = (bar = a, b);
return foo;
})(1, 2);
A.
2
Q. What's the result?
(function(undefined) {
var foo;
return foo === undefined;
})(true);
A.
false
Q. What's the result?
(function(n) {
return ~(n);
})(-3);
A.
2
Q. What's the result?
(function(n) {
return ~~n;
})(-1.5);
A.
-1
Q. What's the result?
(function(x) {
return !!x;
})('a');
A.
true
Q. What's the result?
(function() {
return typeof null === 'null';
})();
A.
false
Q. What's the result?
(function() {
return +(new Date())
})();
A.
1393812837139
Q. What's the result?
(function() {
return (new Date()).valueOf();
})();
A.
1393812845834
Q. What's the result?
(function() {
return ''+(new Date());
})();
A.
"Sun Mar 02 2014 18:14:01 GMT-0800 (PST)"
Q. What's the result?
(function() {
var foo = 'a';
(function(foo) {
foo = 'b';
})(foo);
return foo;
})();
A.
"a"
Q. What's the result?
(function() {
return arguments.toString();
})();
A.
"[object Arguments]"
Q. What's the result?
(function() {
return (function(){}) === (function(){});
})();
A.
false
Q. What's the result?
(function(n) {
return n === new Number(n);
})(10);
A.
false
Q. What's the result?
(function(x) {
return new String(x) === x;
})('a');
A.
false
Q. What's the result?
(function() {
return [1+1] === [2];
})()
A.
false
Q. What's the result?
(function() {
return {foo: 'bar'} === {foo: 'bar'};
})();
A.
false
Q. What's the result?
(function() {
for(;;);
return 1;
})();
A.
*Infinite loop*
Q. What's the result?
(function() {
return ['10','10','10','10'].map(parseInt);
})();
A.
[10, NaN, 2, 3]
Q. What's the result?
(function() {
var o = {
toString: function() {
return 'a';
},
valueOf: function () {
return 1;
}
};
return o + o;
})();
A.
2
Q. What's the result?
(function() {
var f = function g() {
return 1;
};
return g();
})();
A.
ReferenceError: g is not defined
Q. What's the result?
(function() {
return void (1+1);
})();
A.
undefined
Q. What's the result?
(function() {
var a = [1,2];
var b = a;
a = [1,2];
return a === b;
})();
A.
false
Q. What's the result?
(function() {
var x = 1;
return (function () {
return x;
var x = 2;
})();
})();
A.
undefined
Q. What's the result?
(function(n) {
var even = function (num) {
return (num === 0) || !(even(num - 1))
};
var _even = even;
even = void 0;
return _even(n);
})(2);
A.
TypeError: undefined is not a function
Q. What's the result?
(function() {
var n;
function name() {
return this.name
};
n = name.bind({name: 'foo'});
n = n.bind({name: 'bar'})
return n();
})();
A.
"foo"
Q. What's the result?
(function() {
return ('3' > '12') === ('03' > '12');
})();
A.
false
Q. What's the result?
(function() {
return Math.pow(2,53) === (Math.pow(2,53) + 1);
}();
A.
true
Q. What's the result?
(function() {
return Math.pow(2,1024) === Infinity;
}();
A.
true
Q. What's the result?
(function() {
return (Infinity - 100) === Infinity;
}();
A.
true
Q. What's the result?
(function() {
return (0.1 + 0.2 === 0.3);
})();
A.
false
Q. What's the result?
(function() {
return (0.1).toFixed(20);
})();
A.
"0.10000000000000000555"
Q. What's the result?
(function() {
return parseFloat('3.3.4');
})();
A.
3.3
Q. What's the result?
(function() {
return 010;
})();
A.
8
Q. What's the result?
(function() {
return (parseInt('10000000000000000', 10) ===
parseInt('10000000000000001', 10)
);
})();
A.
true
Q. What's the result?
(function(n) {
return (Function)('var n = n || 2; return n;')(n);
})(1);
A.
2
Q. What's the result? (assuming window scope)
var a = 1;
b = 1;
var result = (function() {
return (delete window.a) === (delete window.b);
})();
A.
false
var result = (function(x) {
var isMatch,
regex = /[\w]/gi;
isMatch = regex.test(x);
isMatch = regex.test(x);
return isMatch;
})('a');
A.
false
Q. What's the result?
(function() {
return ![];
})();
A.
false
Q. What's the result?
(function() {
return +[];
})();
A.
0
Q. What's the result?
(function() {
return [][[]];
})();
A.
undefined
Q. What's the result?
(function() {
return +!+[];
})();
A.
1
Q. What's the result?
(function() {
return []+[];
})();
A.
""
Q. What's the result?
(function() {
return true + 1;
})();
A.
2
Q. What's the result?
(function() {
return 1 / '';
})();
A.
Infinity
Q. What's the result?
(function() {
return 1 * null;
})();
A.
0
Q. What's the result?
(function() {
return new Array() == false;
})();
A.
true
Q. What's the result?
(function() {
if ([]) {
return [] == false;
}
})();
A.
true
Released under the MIT License.