https://odykyi.github.io/javascript-idiosyncrasies/
This is a collection of things in JavaScript that may not be well recognized, espcially to beginners.
Disclaimer: Some of these snippets are simply to demonstrate the quirky parts of JavaScript and by no means encourage best practices and should never be seen in production code.
Q. What's the result?
(function() {
var obj = {
valueOf: function(){
return 3;
},
toString: function(){
return 2;
},
}
return obj + 4;
})();
A.
7
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() {
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;
(function() {
return (delete window.a) === (delete window.b);
})();
A.
false
(function(x) {
var isMatch,
regex = /[\w]/gi;
return (regex.test(x) === regex.test(x));
})('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
Q. What's the result?
(function() {
return ''.concat(null);
})();
A.
"null"
Q. What's the result?
(function(a, b) {
return a + + b;
})('a','b');
A.
"aNaN"
Q. What's the result?
(function() {
Object.prototype.foo = 'foo';
return foo;
})();
A.
"foo"
Q. What's the result?
(function() {
return 1000 === 1e3;
})();
A.
true
Q. What's the result?
(function() {
return 9999999999999999;
})();
A.
10000000000000000
Q. What's the result?
(function() {
(function() {
var a = b = 1;
})();
return typeof a === typeof b;
})();
A.
false
Q. What's the result?
(function() {
return Array(3).map(function(o) { return 'a'; });
})();
A.
[undefined, undefined, undefined]
Q. What's the result?
(function() {
var foo = [0,1,2];
foo[10] = 10;
return foo.filter(function(n) { return n === undefined; });
})();
A.
[]
Q. What's the result?
(function(x) {
var ret = null;
switch(x) {
case 'A':
ret = 'A';
break;
default:
ret = 'unknown';
break;
}
return ret;
})(new String('A'));
A.
"unknown"
JSBin | [JSBin explained](http://jsbin.com/leyaqamuru/1/edit?html,js,consol:w jke)
Q. What's the result?
(function() {
var x = {};
return x.prototype === Object.getPrototypeOf(x);
})();
A.
false
Q. What's the result?
(function() {
function foo() {}
foo.name = 'bar';
return foo.name;
})();
A.
"foo"
Q. What's the result?
(function() {
return Array(5).join(',').length;
})();
A.
4
Q. What's the result?
(function(x) {
return x++ + ++x;
})(2);
A.
6
Q. What's the result?
(function() {
'use strict';
let type = typeof foo;
let foo = 1;
return type;
})();
A.
ReferenceError: foo is not defined
Released under the MIT License.