Javascript wrinkles
Notes for people who think console.log() is inherently interesting.
Javascript notes and quirks
- The plus operator:
+
- strings containing numbers work in calculations if prefixed with a
+ sign e.g. add these: +"1.1" + +"1.1".
- Check existence
var myArray = new Array(); if (!myArray[0]) {console.log("Not defined")} uses false to print the statement.
- Variable scope
-
local to the code a block resides within (not block statement scope). They are also 'hoisted' as if at the top of a function/statement.
Try this function Scope() { if (true) { var x = 5 }; alert("x: " + x + ", y: " + y); }; var y = 6;
- Constants
-
Declared with the
const keyword, e.g. const prefix = '212';z = prefix + 424;alert(prefix);.
Constants cannot share a name with a function or variable in the same scope, or be called directly e.g. alert(prefix);.
- Literals
- Array literals (literals have fixed values) use square brackets:
var mynums = ["one", "two", "three"]; alert(mynums[0]).
- Avoid spaces after
\ in multiline string literals
- Always add a return immediately after
\ as '\ ' will produce an error. This multiline string is broken before 'another'.
- Return the entire code for a function
- Simply omit the brackets
alert(IsDefined)
- Retrieving values from an object
-
value by dot notation:
flight.departure.IATA
value by name: flight['number'] (Douglas Crockford: Javascript: the Good Parts, or the video or a series)
value of array element in object: employees.accounting[1].firstName (from Mastering JSON)
- Using the file api
- HTML5 allows interaction with local files via its File API specification - test your browser's file api here.
Javascript good practice
- Don't use
++ or --
- Use
+= and -= instead, as ++ and -- are too tight, too tricky, too cryptic (Crockford)
- Use
=== and !== for comparison
- This will ensure that:
0, '', undefined, null, false, true all return the expected result. Both == and != do type coercion before comparing. This causes \f\r\n\t == 0 to be true. If you want this, use the shorthand (foo) and (!foo) instead of (foo != 0) and (foo == 0) (Crockford)
- Avoid using
new
- Don't use
new to create a Boolean, Number or String; and use {} and [] to create a new Object or Array
- Use
object.create, but not for arrays
- because object produced will inherit the array’s values and methods, but lack the length property.
- Declare functions before you call them
- and declare variables at the top of functions, avoiding
for(var i...
- Name constructor functions with an initial capital
- to help spot instances where they're called without
new. Better: use object.create (instead of new) for a new instance of a specific object.