JavaScript the aweful parts

Here are some aweful (misunderstood) parts of JavaScript that you must know.

Note: TypeScript is a superset of JavaScript. Just with documentation that can actually be used by compilers / IDEs ;)

Null and Undefined

Fact is you will need to deal with both. Just check for either with == check.

/// Image you are doing `foo.bar == undefined` where bar can be one of:
console.log(undefined == undefined); // true
console.log(null == undefined); // true
console.log(0 == undefined); // false
console.log('' == undefined); // false
console.log(false == undefined); // false

So == undefined or (== null) will work only for undefined or null. You generally don't want to make a distinction between the two.

undefined

Remember how I said you should use == null. Of course you do (cause I just said it ^). Don't use it for root level things. In strict mode if you use foo and foo is undefined you get a ReferenceError exception and the whole call stack unwinds.

You should use strict mode ... and in fact the TS compiler will insert it for you if you use modules ... more on those later in the book so you don't have to be explicit about it :)

So to check if a variable is defined or not at a global level you normally use typeof:

if (typeof someglobal === 'undefined') {
  // someglobal is now safe to use
  console.log(someglobal);
}

this

Any access to this keyword within a function is actually controlled by how the function is actually called. It is commonly referred to as the calling context.

Here is an example:

function foo() {
  console.log(this);
}

foo(); // logs out the global e.g. `window` in browsers
let bar = {
  foo
}
bar.foo(); // Logs out `bar` as `foo` was called on `bar`

So be mindful of your usage of this. If you want to disconnect this in a class from the calling context use an arrow function, more on that later.

Next

That's it. Those are the simple misunderstood portions of JavaScript that still result in various bug for developers that are new to the language 🌹.

results matching ""

    No results matching ""