Think you know JavaScript? Really? Are you sure? Try the following quick quiz. Guess what each expression evaluates to. (Answers given at the end.)
1. ++Math.PI
2. (0.1 + 0.2) + 0.3 == 0.1 + (0.2 + 0.3)
3. typeof NaN
4. typeof typeof undefined
5. a = {null:null}; typeof a.null;
6. a = "5"; b = "2"; c = a * b;
7. a = "5"; b = 2; c = a+++b;
8. isNaN(1/null)
9. (16).toString(16)
10. 016 * 2
11. ~null
12. "ab c".match(/\b\w\b/)
Answers:
1. 4.141592653589793
2. false
3. "number"
4. "string"
5. "object"
6. 10
7. 7
8. false
9. "10"
10. 28
11. -1
12. [ "c" ]
For people who work with JavaScript more than occasionally, score as follows:
(correct answers: score)
12: MASTER OF THE KNOWN UNIVERSE
10 - 11: SAVANT
8 - 9: EXPERT
5 - 7: KNOWLEDGEABLE
< 5: RUSTY
NOTES
The
answer to No. 2 is the same for JavaScript as for Java (or any other
language that uses IEEE 754 floating point numbers), and it's one reason
why you shouldn't use floating point arithmetic in any serious
application involving monetary values. There's an interesting
overview here.
No.
6: In an arithmetic expression involving multiplication, division,
and/or subtraction, if the expression contains one or more strings, the
interpreter will try to cast the strings to numbers first. If the
arithmetic expression involves addition, however, all terms will be cast to strings.
No.
7: What you've got here is "a, post-incremented, plus b,"
not "a plus pre-incremented b."
No. 9: toString( )
takes a numeric argument (optionally, of course). An argument of "16"
means base-16, hence the returned string is a hex representation of 16,
which is "10." If you write .toString(2), you get a binary representation of the number, etc.
No. 10: 016
is octal notation for 14 decimal. Interestingly, though, the
interpreter will treat "016" (in string form) as base-ten if you
multiply it by one.
Don't feel bad if you didn't do well on this
quiz, because almost every question was a trick question (obviously),
and let's face it, trick questions suck ass. OTOH, if you did
well on a test that sucks, you should take full credit. It means you're no fool.