Nobody knows Javascript 100%. Nobody. I've met haughty people who pretend they do, but they don't. I also sometimes find interviews a little invalidating, like maaan you caught me out on a total edge case. Or sometimes, when I've been conkers deep in Elasticsearch or CSS or some other seemingly random task I end up with, and a simple question comes my way and I'm hit with a complete blank. And it's a question I knew! Stupid brain as homer would say. Anyways, this is a list of refreshers more than anything for interviews I may do.
I'm going to start with the basics, then work up to more advanced stuff.
use strict
What does the 'use strict' directive do? It tells the compiler/interpreter to utilise the strict variant of the ECMAScript when parsing. This spots global variables, prevents 'this' coercion, disallows duplicate property names.
Null
There is a bug in the language at the moment with null. Null should be null, but it isn't, it is an object.
var bar = null;
typeof bar === 'object' //true
Declared variables, undeclared, and undefined
x === undefined //throws a reference error 'x is not defined'
let x;
x === undefined //true
Truthy and Falsy stuff
A function is an object, objects are evaluated to true:
!!function f(){} === true
Usually you get some questions about the ==
and ===
operators. ===
is a lot faster because the ==
operator runs code to cast the type and then check values. Like "1" ==
1 returns true
.
1 === 1; //O(1)
"1" == 1'; //O(n)
Return statement
Crockford is great. His example of the return statement issues in javascript is classic. Javascript as automatic semicolon insertion, so the below would return undefined
.
return
{
name: 'Billy Bob'
}
Number quirks
Because javascript uses the IEE754 standard, and numbers with computers are not great - in fact there is mathematical theory that numbers are constantly changing. But anyway, you have to be careful when it comes to numbers. A common question is something like this, will the below be true or false:
(0.033 + 0.0312) === 0.0642
It would be false, because the result would be:
0.06420000000000001