# All Things JavaScript ## Concepts * [this](http://unschooled.org/2012/03/understanding-javascript-this/) * [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) * [Hoisting](http://net.tutsplus.com/tutorials/javascript-ajax/quick-tip-javascript-hoisting-explained/) * [Operator Precedence](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence) * Lambda * Object literals * Prototypical inheritance vs. classical inheritance * Prototypical inheritance: objects inherit from other objects; class free * Differential inheritance * __proto__, delegation * Object.create * new operator: required when calling constructor function * Power constructors * Immediately-Invoked Function Expression (IIFE); self-invoked functions * [Regular Expressions](http://tech.pro/tutorial/1214/javascript-regular-expression-enlightenment) * Declarative vs imperative * Closures * Loose typing * Dynamic objects * Object hardening (freeze) * Truthy, Falsy * Phony arrays * CORS * ["use strict"](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/Strict_mode) * Treats some mistake as errors * Silent failures thrown as errors * Use within function to avoid concatenation problems * Forces use of explicit "var" * Keeps vars created by eval within evaluated code * Prevents/throws on: * accidental creation of globals * assignments to non-writables (NaN, getter-only property, new property on non-extensible object) * deleting undeletables * duplicate property names * duplicated argument names * octal syntax (leading zero prefix on numbers) * with * Type coercion - prevented with === * typeof * 0.1 + 0.2 !== 0.3 * IEEE floating point problem * for...in * Does deep dredge instead of shallow skim * Deep members must be explicitly filtered (obj.hasOwnProperty(prop)) * [XSS](http://goo.gl/OrA3I) * Separation of concerns * [Learning JavaScript Design Patterns](http://addyosmani.com/resources/essentialjsdesignpatterns/book/) * [Pro JavaScript Design Patterns](http://jsdesignpatterns.com) * [Learning Javascript with Object Graphs](http://howtonode.org/object-graphs) * AOP * [Connecting your shiz.js with AOP](http://blog.briancavalier.com/aop-jsconf-2013/slides/index.html) (slides) - ([code](https://github.com/briancavalier/aop-jsconf-2013)) * [ajacksified/Mediator.js](https://github.com/ajacksified/Mediator.js) * [cujojs/meld](https://github.com/cujojs/meld) * [Interceptors](https://github.com/cujojs/rest/blob/master/docs/interceptors.md#interceptor-principals) * Promises, events * [tildeio/rsvp.js](https://github.com/tildeio/rsvp.js) * [kriskowal/q](https://github.com/kriskowal/q) * Pub/sub * [https://github.com/postaljs/postal.js](postal.js) * Call vs. apply * Function declaration vs. function expression * [Automatic semicolon insertion](http://stackoverflow.com/a/2846298/176758) (ASI) ```javascript function step(){} var step = function() {} ``` ## Complexity * [jscomplexity.org](http://jscomplexity.org/complexity) ## Regular expressions * [JavaScript Regular Expression Enlightenment](http://tech.pro/tutorial/1214/javascript-regular-expression-enlightenment) ## ES6 * [JSdotNext](http://www.jsdotnext.com) * Iterators * Maps, weak maps, sets * Proxies * Generators * [Generators and Suspend](http://dailyjs.com/2013/05/31/suspend/) * [Iterators and generators in ECMAScript 6](http://www.2ality.com/2013/06/iterators-generators.html) * Default parameters * Rest parameters * Spread * Let, const * Symbols -- guaranteed not to collide * Method shorthand * Object.mixin * Arrow functions * [Proper Tail Calls](http://bbenvie.com/articles/2013-01-06/JavaScript-ES6-Has-Tail-Call-Optimization) ## Frameworks * [CujoJS](http://cujojs.com) ### Ember.js * [Ember and Web Components](https://gist.github.com/wycats/9144666b0c606d1838be) ### AngularJS * [yearofmoo.com](http://www.yearofmoo.com) * [AngularJS and TypeScript](http://notebookheavy.com/2013/05/22/angularjs-and-typescript/) * [Dynamically Loading Controllers and Views with AngularJS and RequireJS](http://weblogs.asp.net/dwahlin/archive/2013/05/22/dynamically-loading-controllers-and-views-with-angularjs-and-requirejs.aspx) * [ngmin](https://github.com/btford/ngmin) * [1.2 and Behond](https://www.youtube.com/watch?v=W13qDdJDHp8&feature=g-high-u) ## TypeScript * [Modularization in TypeScript](http://www.codeproject.com/Articles/528295/ModularizationplusinplusTypeScript) * [Changes in 0.9.0](https://typescript.codeplex.com/wikipage?title=Known%20breaking%20changes%20between%200.8%20and%200.9) ## Data visualization * [Miso](http://misoproject.com/) ## Node.js * [Practical Examples of the New Node.js Streams API](http://blog.strongloop.com/practical-examples-of-the-new-node-js-streams-api/) ## Express.js * [expressjs re-routing](http://shtylman.com/post/expressjs-re-routing/) ## Debugging * [Theseus](http://blog.brackets.io/2013/05/31/better-javascript-debugging-with-theseus/) ## Exciting things, now and near * ES6 (see above) * Packaged apps * ES7 * Object.observe * Client/server model synchronization libraries * ShareJS + Racer * [Web Components](https://gist.github.com/aaronshaf/5695642) * WebRTC -- peer-to-peer communication between browsers * socket.io style (depending on the wrapper) * video & audio chat * [Native promises](http://dom.spec.whatwg.org/#promises) * Video: [A More Awesome Web: Features You've Always Wanted - Google I/O 2013](http://www.youtube.com/watch?v=N_wTBKMuJis) ## Books * [JSbooks](http://jsbooks.revolunet.com) * [JavaScript: The Good Parts by Crockford, Douglas](http://amzn.com/B0026OR2ZY) * [Secrets of the JavaScript Ninja, by John Resig](http://amzn.com/193398869X) * [JavaScript: The Definitive Guide, by David Flanagan](http://amzn.com/0596000480) * [Effective JavaScript: 68 Specific Ways to Harness the Power of JavaScript, by David Herman](http://amzn.com/B00AC1RP14) ## Videos * [Introduction to JavaScript and Browser DOM](https://www.youtube.com/watch?v=ljNi8nS5TtQ) * [JavaScript: The Good Parts](https://www.youtube.com/watch?v=hQVTIJBZook) * [YUI Theater](http://www.youtube.com/user/yuilibrary/videos?query=javascript) * [Google Tech Talks](https://www.youtube.com/user/GoogleTechTalks/videos?query=javascript) * [TSJS talks](http://vimeo.com/channels/txjs2013) * [JSConf](http://www.youtube.com/jsconfeu) ## Conferences * [UtahJS](http://conf.utahjs.com) * [GothanJS](http://www.gothamjs.com) * [TXJS](texasjavascript.com) * [JSConf](http://jsconf.com) * [Fluent](http://fluentconf.com/fluent2013) * [NodeConf](http://www.nodeconf.com/) * [jqcon](http://events.jquery.org) * [strangeloop](https://thestrangeloop.com/sessions) ## See also * [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript) * [Learning Advanced JavaScript](http://ejohn.org/apps/learn/) * [Douglas Crockford's JavaScript](http://crockford.com/javascript/) * [Eloquent JavaScript: A Modern Introduction to Programming](http://eloquentjavascript.net), by Marijn Haverbeke * [superhero.js](http://superherojs.com/) * [How to keep up to date on Front-End Technologies](http://uptodate.frontendrescue.org) * [Web Development Teaching Materials](http://www.teaching-materials.org/) * [Web Directions](http://www.youtube.com/user/webdirections) * [Open Web Platform Daily Digest](http://webplatformdaily.org) * [Patterns of Large-Scale JavaScript Applications](https://speakerdeck.com/kimjoar/patterns-of-large-scale-javascript-applications) ## To add https://www.youtube.com/playlist?list=PL37ZVnwpeshGLrMTDPV12z7KmjrXsOeHT#rejectjs