JavaScript: The Definitive Guide by David Flanagan

JavaScript: The Definitive Guide

6 min read

8/14/17

  • An expression is a phrase that can be evaluated to produce a value

  • Statements are full sentences that end with a semicolon

  • A function is a named and parameterized block of JavaScript code we define once and can them invoke over and over again

  • Methods are functions within objects, properties of an object

  • The 'this' keyword refers to the object on which the method is defined

  • Variables allow a value to be referred to by name

  • An array is an ordered collection of numbered values

  • A function is an object that has executable code associated with it

  • Constructor: a function written to be used with the new operator to initialize a newly created object

  • The JavaScript interpreter performs automatic garbage collection for memory management. When an object is no longer referred to, the interpreter reclaims the memory

  • Strings are an array of characters, they are immutable

  • JavaScript converts values liberally from one type to another

  • Variables are untyped

  • Variables declared outside of a function are global variables and can be accessed anywhere

  • String methods return a new string, they do not modify the string they are invoked on

  • Undefined is not initialized or non existant

  • Null == undefined // true, null === undefined // false

  • We can copy or compare objects or arrays with for loops

  • === does not perform conversions when testing for equality

  • JavaScript has function scope, not block scope. Let keyword is block scoped

  • JavaScript objects are compared by reference, not by value

  • Short circuit: when an expression with && or || stops evaluating based on the first candidate

  • || (or) is often used in function bodies to supply default values for parameters

  • For (variable in object) loops through properties of an object

  • You cannot rely on a specific order with for/in on object properties

  • Scope chain: a list of objects that are searched, in order, to perform variable name resolution

  • The key feature of JavaScript is 'prototypal inheritance.' Each object has a prototype which it inherits properties from

  • Higher-order function: a function that operates on functions, taking one or more functions as arguments and returning a new function

  • Memoization: cache previously computed results

  • Classes define objects that share certain properties

  • Instances have their own state in properties and behavior in methods

  • Classes can be thought of as types

  • Enumerated type: type with a finite set of values

  • Modules export a public API: functions, classes, properties, and methods

  • For/each loop is like the for/in loop but it iterates over the values instead of the properties

  • An iterator is an object that allows iteration over some collection of values and keeps track of the current position in the collection

  • Next() method returns the next value from the collection

  • We often don't use iterator object directly, instead, we use iterable objects

  • You can call Iterator() to obtain an iterator object from an iterable object

  • You can call the iterators next() method which returns an array with two values, the first is a property name, the second is the value. for (let [k, v] in Iterator({ a: 1, b: 2 }))

  • Yield is used in generators to return values from a function

  • Generator: an object that represents the current state of a generator function

  • Return value of a nonblocking method cannot return the result. We need to provide a function to be invoked when the results are ready or the operation is complete. You can pass a function as an argument

  • The window object is the main entry point to all client-side JavaScript features and APIs

  • The document represents the content displayed in the window

  • JavaScript is commonly wrapped within a window.onload event handler

  • Web apps use XMLHttpRequest objects to make scripted HTTP requests to obtain new information from the server without a page reload

  • Embed JavaScript in HTML in 4 ways: 1. inline between script tags 2. external file in src attribute of script tag 3. in HTML event handler attribute, such as on click or onmouseover 4. in a URL that uses JavaScript

  • JavaScript code in a script is executed once, in order to be interactive, a JavaScript program must define event handlers

  • If a script defines a new global variable or function, that variable or function will be visible to any JavaScript code that runs after the script does

  • Defer async on a script tag is used to tell the browser the script won't be generating content and can continue to render the document while downloading the script

  • Defer is wait until the document is loaded and parsed

  • Async is run the scripts as soon as possible but do not block document parsing while the script is being downloaded

  • Events have a name (type, ex. 'click'), and a target (the object on which it occured)

  • JavaScript is single-threaded so you never need to worry about locks, deadlock, or race conditions

  • Use setTimeout or setInterval to run subtasks in the background while you update a progress indicator that displays feedback for the user

  • Web worker: background thread for performing computationally intensive tasks without freezing the user interface

  • Document.readyState == 'loading' when creating the document object and parsing the HTML elements. Script tags without async or defer are executed synchronously and the parser pauses while the script downloads and runs

  • When the document is completely parsed, document.readyState == 'interactive'

  • When all content is loaded and all async scripts have loaded and executed, the document.readyState == 'complete' and the browser fires a load event on the window object

  • Browser sniffer: code that determines the vendor and vision of the current browser

  • A JavaScript program can close windows it opened itself

  • The document object represents the content of the window

  • DOM is an API for representing and manipulating document content

  • Query a document for elements with id, name, tag, class, and css selector

  • A NodeList object that behaves like a read-only array of Element Objects

  • Nodes are connected in a doubly linked list

  • In general, to convert between the document and viewport coordinates we must add or subtract the scroll offsets

  • PageXOffset and pageYOffset help determine the scrollbar positions for the browser window

  • Viewport size: window.innerWidth and window.innerHeight

  • Window or element.scrollTop can be set to make the browser scroll

  • Event types are all lowercase

  • Within the body of an event handler, 'this' refers to the event target. The single argument is the event object

  • Like all JavaScript functions, event handlers are lexically scoped: they are executed in the scope in which they are defined, not the scope from which they are invoked

  • If an event handler returns false, it tells the browser not to perform the default action

  • All data stored in cookies is transmitted to the server with every HTTP request

  • Local storage is permanent

  • SessionStorage exists until the window or tab is closed

  • Use a manifest file to list all urls that should be cached

  • Browser online check: navigator.onLine

Want updates?