A couple of times per year, I have to work on something that requires me to write some JavaScript. When I do, I have to reacquaint myself with the language by skimming through JavaScript: The Good Parts and finding some good online reference documentation.
In an effort to reduce the time needed to do this next time, I'm recording the little things that I ran across that I didn't remember or wished I could have found faster. So this is my own personal refresher for JavaScript. It may not help you at all.
Also see my Node.js Cheatsheet.
Reference Links
- ECMAScript Language Specification, 3rd edition (PDF)
- webplatform.org: JavaScript
- Mozilla Developer Network
- JavaScript Reference
- JavaScript Guide
- Array, Boolean, Date, Error, Function, Math, Number, Object, RegExp, String
- Douglas Crockford: Code Conventions, Private Members
- Essential JavaScript Patterns for Beginners
- jQuery Docs, Getting Started with jQuery, Quick and Dirty Guide to QUnit
- Microsoft Ajax Library Client Reference
- DOM Level 1
- DOM Level 2 Core, DOM Level 2 Events, DOM Level 2 HTML
- DOM Level 3 Core, DOM Level 3 XPath
- WebKit DOM Reference, WebKit DOM Programming Topics, Apple JavaScript Coding Guidelines
- Gecko DOM Reference
- XMLHttpRequest
- Geolocation API Specification
Gotchas
Generally, use === and !== rather than == and != (which coerce arguments before comparison).
Numeric values are really IEEE floating-point, even when they look like integers.
NaN is not equal to itself. Use isNaN()
Semicolons are often optional, but interpreter may insert semicolons in unexpected places, so it is best to use semicolons and to put opening braces on the same line as the keyword.
If var
declaration is missing, then a variable is global. The scope of a var
is the entire function in which it is declared (blocks do not create a new scope)
Note difference between substr(startIndex, charCount)
and substring(startIndex, endIndex)
.
Avoid using / / style comments, as regular expressions can contain similar character sequences.
Special Values and Constants
null, undefined, false, true, NaN, Infinity
Values that are considered to be "false" in conditionals: undefined, null, false, '', 0, NaN
typeof obj returns one of these values: 'undefined', 'object', 'boolean', 'number', 'string', 'function'. If the operand is an array or null, then the result is 'object'. If the operand is a regexp, the result may be either 'object' or 'function'.
Standard Methods
- array.concat(item...)
- array.join(separator)
- array.pop()
- array.push(item...)
- array.reverse()
- array.shift()
- array.slice(start, end)
- array.sort(comparefn)
- array.splice(start, deleteCount, item...)
- array.unshift(item...)
- function.apply(thisArg, argArray)
- number.toExponential(fractionDigits)
- number.toFixed(fractionDigits)
- number.toPrecision(precision)
- number.toString(radix)
- object.hasOwnProperty(name)
- regexp.exec(string)
- regexp.test(string)
- string.charAt(pos)
- string.charCodeAt(pos)
- string.concat(string...)
- string.indexOf(searchString, position)
- string.lastIndexOf(searchString, position)
- string.localeCompare(that)
- string.match(regexp)
- string.replace(searchValue, replaceValue)
- string.search(regexp)
- string.slice(start, end)
- string.split(separator, limit)
- string.substring(start, end)
- string.toLocaleLowerCase()
- string.toLocaleUpperCase()
- string.toLowerCase()
- string.toUpperCase()
- String.fromCharCode(char...)