Javascript likes to be helpful. That means it wants to put bugs in your code for you. One example is automatic type coercion: converting values, if needed, to other types of objects. There are several examples:
[]The [] operator (to access properties of an object) coerces strings:
> var a = ['hello', 'how', 'are', 'you'] > a[0] hello > a['0'] hello
+The + operator can add two numbers or concatenate two strings. It
depends on the types of the objects:
> 5 + 6 11 > '5' + '6' '56' > 5 + '6' '56'
Javascript has two kinds of equality operators: == and ===. The
first kind, ==, does some really weird stuff related to coercion, so
it’s best to avoid it entirely. Always use === and, for testing
non-equality, !== (rather than !=). Read on for more details of
why this is good advice.
The == operator is bad because it coerces the values on either
side if they are of different types. For example, it might try to
interpret a string as an integer:
> 0 == '0' true
The === operator leaves the types alone:
> 0 === '0' false
varvar defines the private variables for a function. For example, put
this into the left-hand window of your repl.it
editor, then click the Run button:
x = "hello"; y = "goodbye"; var testA = function(j) { var x = j; y = j; console.log("hello, x is ", x); console.log("hello, y is ", y); } var testB = function() { console.log("hi, x is ", x); console.log("hi, y is ", y); }
Now, in the right-hand console, run the two functions and think about the results:
> testA(5) hello, x is 5 hello, y is 5 > testB() hi, x is hello hi, y is 5
What happened? Because they were declared outside of a function
definition, x and y are global variables. But when we use var x
inside of testA, x is a local variable for testA.
The lesson is to always declare all of your variables at the top of the function.
NaNNaN (Not a Number) is a value that results from some invalid
computation. For example:
> 0/0 NaN
NaN is not equal to anything else, including itself:
> NaN === NaN false > NaN !== NaN true
You can check if something is Nan with isNan():
> x = NaN > isNan(x) true
All values evaluate to true except for a few “falsy” ones. These
are:
falsenullundefined'' (the empty string)0 (the number zero)NaNFractional numbers can act funny:
> .1 + .2 0.30000000000000004 > .1 + .2 === .3 false
You can use the logical or (||) operator to get default values out
of objects. This works because Javascript returns undefined when
you ask for a property that doesn’t exist, and because undefined is
a “falsy” value. Therefore:
> 3 || undefined 3 > undefined || 3 3
We can use this to get default values:
> options = {size: 'small', color: 'blue'} > var size = options.size || 'medium' > size 'small' > var material = options.material || 'metal' > material 'metal'