http://javascript-puzzlers.herokuapp.com/
1. What is the result of this expression? (or multiple ones)
["1", "2", "3"].map(parseInt)
A) ["1", "2", "3"]
B) [1, 2, 3]
C) [0, 1, 2]
D) other
Answer: D
Explanation: What you actually get is [1, NaN, NaN] because parseInt takes two parameters (val, radix) and map passes 3 (element, index, array)
2. What is the result of this expression? (or multiple ones)
[typeof null, null instanceof Object]
A) ["object", false]
B) [null, false]
C) ["object", true]
D)other
Answer: A
Explanation: typeof will always return "object" for native non callable objects.
3. What is the result of this expression? (or multiple ones)
[ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ]
A) an error
B) [9, 0]
C) [9, NaN]
D) [9, undefined]
Answer: A
Explanation: Per spec: reduce on an empty array without an initial value throws TypeError
4. What is the result of this expression? (or multiple ones)
var val = 'smtg'; console.log('Value is ' + (val === 'smtg') ? 'Something' : 'Nothing');
A) Value is Something
B) Value is Nothing
C) NaN
D) other
Answer: D
Explanation: it actually prints 'Something' the + operator has higher precedence than the ternary one.
5. What is the result of this expression? (or multiple ones)
var name = 'World!';
(function () {
if (typeof name === 'undefined') {
var name = 'Jack';
console.log('Goodbye ' + name);
} else {
console.log('Hello ' + name);
}
})();
A) Goodbye Jack
B) Hello Jack
C) Hello undefined
D) Hello World
Answer: A
Explanation: The var declaration is hoisted to the function scope, but the initialization is not.
6. What is the result of this expression? (or multiple ones)
var END = Math.pow(2, 53);
var START = END - 100;
var count = 0;
for (var i = START; i <= END; i++) {
count++;
}
console.log(count);
A) 0
B) 100
C) 101
D) other
Answer: D
Explanation: It goes into an infinite loop, 2^53 is the highest possible number in javascript, and 2^53+1 gives 2^53, so i can never become larger than that.
7. What is the result of this expression? (or multiple ones)
var ary = [0,1,2];
ary[10] = 10;
ary.filter(function(x) { return x === undefined;});
A) [undefined × 7]
B) [0, 1, 2, 10]
C) []
D) [undefined]
Answer: C
Explanation: Array.prototype.filter is not invoked for the missing elements.
8. What is the result of this expression? (or multiple ones)
var two = 0.2
var one = 0.1
var eight = 0.8
var six = 0.6
[two - one == one, eight - six == two]
A) [true, true]
B) [false, false]
C) [true, false]
D) other
Answer: C
Explanation: JavaScript does not have precision math, even though sometimes it works correctly.
9. What is the result of this expression? (or multiple ones)
<pre name="code" class="javascript">function showCase(value) {
switch(value) {
case 'A':
console.log('Case A');
break;
case 'B':
console.log('Case B');
break;
case undefined:
console.log('undefined');
break;
default:
console.log('Do not know!');
}
}
showCase(new String('A'));
A) Case A
B) Case B
C) Do not know!
D) undefined
Answer: D
Explanation: switch uses === internally and new String(x) !== x
10. What is the result of this expression? (or multiple ones)
function showCase2(value) {
switch(value) {
case 'A':
console.log('Case A');
break;
case 'B':
console.log('Case B');
break;
case undefined:
console.log('undefined');
break;
default:
console.log('Do not know!');
}
}
showCase2(String('A'));
A) Case A
B) Case B
C) Do not know!
D) undefined
Answer: A
Explanation: String(x) does not create an object but does return a string, i.e. typeof String(1) === "string"