What five JavaScript concepts do I need to understand to be a good AngularJS developer?

angularjs, javascript

Solution

- the type system: there are two fundamentally different kinds of values: primitives and objects. Number, string, boolean, `null`, `undefined` are all primitives. Array ( `[1,2,3]` ), object ( `{ prop1: value1, prop2: value2 }` ), and function are all objects.

- prototypal inheritance – this is especially important when you attempt to databind in AngularJS to a primitive

- array['syntax'] === array.syntax; array['$id'] === array.$id; array[someExpression] has no eqivalent "." notation

- variable scope and assignment

- a variable defined anywhere inside a function is visible everywhere inside that function

- when a variable is assigned an object, it is assigned a reference (not a copy). This becomes important in AngularJS when, e.g., you fetch JSON data from a server and you assign the results to a variable. This resets the reference. Other variables (say in your controller) that point to the old reference continue to point to the old reference. (example)

- closures – these are very useful when defining AngularJS services (example) and when defining methods on a controller using `this` (example)

Also note that JavaScript is single-threaded!

Problem

Suppose I'm used to coding on the server side (with server-side languages), and now I'm learning AngularJS. That means I first need a good understanding of JavaScript. If I don't have to time to fully learn JavaScript right now, what five JavaScript concepts would you recommend I learn first/well in order to be an effective AngularJS developer?

Original source