Free JavaScript Programming Books, Videos, Useful links, Useful Tools, and many more you will find in this article!:)
JavaScript (a dialect of ECMAScript) is a high-level, dynamic, multi-paradigm, object-oriented, prototype-based, weakly-typed, and interpreted language traditionally used for client-side scripting in web browsers (not to be confused with Java). JavaScript can also be run outside of the browser with the use of a framework like Node.js, Nashorn, Wakanda, or Google Apps Script. Despite the name, it is unrelated to the Java programming language and shares only superficial similarities.
Unless a tag for a framework or library is also included, a pure JavaScript answer is expected for questions with the [tag: JavaScript] tag.
JavaScript runs on nearly every operating system, and an engine is included in mainstream web browsers. Developed in 1995 by Brendan Eich at Netscape Communications, it was originally called LiveScript but was renamed to JavaScript due to Netscape's friendly relationship with Sun Microsystems (creators of Java) at the time.
Standalone JavaScript engines or interpreters are available as well, including:
- Mozilla's Spidermonkey, the first JavaScript engine ever written, currently used in Mozilla Firefox.
- Google's JavaScript engine, Chrome V8, used in Google Chrome and Chromium.
- Google Apps Script, a cloud-based/server-side interpreter that provides programmatic "macro-like" control of Google Apps services and documents.
- Node.js, built on top of V8, a platform which enables server-side applications to be written in JavaScript.
- Windows includes JScript, a JavaScript variant in Windows Script Host.
- Chakra, a fork of JScript, is developed by Microsoft and used in Edge.
- Mozilla also offers Rhino, an implementation of JavaScript built in Java, typically embedded into Java applications to provide scripting to end users.
- WebKit (except for the Chromium project) implements the JavaScriptCore engine.
- ActionScript (originally derived from HyperTalk) is now an ECMAScript dialect and uses a lot of ECMAScript APIs.
- Duktape Embeddable, a portable ECMAScript engine in C with a small memory footprint.
- Wakanda, a framework, IDE, and Server built on V8 supporting server-side JavaScript
- Meteor: a Meteor application is a mix of client-side JavaScript that runs inside a web browser or PhoneGap mobile app, server-side JavaScript that runs on the Meteor server inside a Node.js container. (according to MeteorJS documentation)
- Nashorn, a JavaScript engine developed in the Java programming language, based on the Da Vinci Machine (JSR 292)
The Mozilla Developer Network contains high-quality documentation on JavaScript.
JavaScript is typically used to manipulate the Document Object Model (DOM) and Cascading Style Sheets (CSS) within the browser. This allows user interface scripting, animation, automation, client-side validation, and much more.
With the recent emergence of platforms such as Node.js, JavaScript can now be used to write server-side applications. In addition, it is also used in environments that aren't web-based, like PDF documents, site-specific browsers, desktop widgets, etc.
Nomenclature
Although it was developed under the name Mocha, the language was officially called LiveScript when it first shipped in beta releases of Netscape Navigator 2.0 in September 1995, but it was renamed JavaScript when it was deployed in the Netscape browser version 2.0B3.
The change of name from LiveScript to JavaScript roughly coincided with Netscape adding support for Java technology in its Netscape Navigator web browser. The final choice of name caused confusion, giving the impression that the language was a spin-off of the Java programming language, and the choice has been characterized as a marketing ploy by Netscape to give JavaScript the cachet of what was then the hot, new web-programming language.
People often use the term JavaScript informally. The language and the term originated from Netscape. ECMAScript, JavaScript, and JScript are terms that are easy to confuse.
ECMAScript was developed as a standardization of Netscape's JavaScript and Microsoft's independently-developed JScript. The canonical reference is the ECMAScript® 2015 Language Specification. While JavaScript and JScript aim to be compatible with ECMAScript, they also provide additional features (and other deviations) not described in the ECMA specifications. Other implementations of ECMAScript also exist.
The differences today for those who use JavaScript are negligible; people generally do not distinguish the JavaScript and JScript variations from ECMAScript.
ECMAScript versions
Most modern browsers implement JavaScript based on the ECMAScript 6 specification, although some fail to implement some ES6 features. However, older browsers such as Internet Explorer 8 implement the ECMAScript 3 specification, which does not contain functions such as Function.prototype.bind
, and even JSON.parse
, among others. To see current browser support of ES6 features, see https://caniuse.com/#search=es6.
The current version of ECMAScript is ECMAScript 9, properly known as ECMAScript 2018, which was finalized in June 2018.
When asking a JavaScript question, you should:
- Debug your JavaScript code (see Creativebloq, MDN, Google, & MSDN).
- Isolate the problematic code and reproduce it in a Stack Overflow code snippet or an external online environment such as JSFiddle, JS Bin or PasteBin (remember to also include the code in the question itself).
- If a library or framework is used, then tag the question with the appropriate tags: jquery for jQuery, prototypejs for Prototype, mootools for MooTools, and so on. However, if a framework is not used or necessary, do not include these tags.
- If the issue is client-side, mention which browser the code is having problems on, and what error messages, if any, were thrown by the browser. Use the Developer Tools for your browser (see "Useful Tools" below) to see these messages. If the question is browser-specific, use tags firefox, google-chrome, internet-explorer, opera, safari, microsoft-edge, opera-mini etc.
- Only tag the question as css or html if you are asking about an issue that concerns the combination of one of those with JavaScript and could only be answered with information specifically regarding either of those subjects.
Learning JavaScript
- Eloquent JavaScript: A modern introduction to programming
- You Don't Know JS: An in-depth book series covering all main topics
- The MDN JavaScript Guide: A comprehensive JavaScript guide at the Mozilla Developer Network
- quirksmode.org - JavaScript: Good introduction to JavaScript and other technologies used in the browser (e.g. DOM).
- JavaScript Tutorial: A pure JavaScript book that covers nearly everything.
- JavaScript Tutorial & Sample Codes: A pure JavaScript tutorial and sample codes for real-life problems faced in the JavaScript.
- JavaScript Core Skills: An introduction covering the basic fundamentals of programming.
- quirksmode.org | Introduction to Events: A comprehensive description of the various types of event handling. Includes the overview of different ways to attach event handlers and points out quirks between different browsers. A must-read if you want to understand event handling.
- W3C Wiki | JavaScript basics, DOM: A comprehensive list of links to W3C educational materials.
- JavaScript Debugging for Beginners: A good introduction to debugging JavaScript. A must-read!
- Modern JavaScript: Develop and Design: A modern guide to learning JavaScript using practical examples and approaches that should be used today.
- Learning Advanced JavaScript: A set of interactive exercises that guide you through some of the fundamental concepts of JavaScript.
- JavaScript Style Guide: Easy to follow guide that provides insight into styling JavaScript code.
- Zeros in JavaScript: Easy to check what is returned when comparing any two values.
- JavaScript.RU: Central JavaScript resource for Russian-speaking community.
- JavaScript in Polish: A popular site about JavaScript in the Polish language.
- W3 Schools Javascript Tutorials: A beginner's level tutorial in JavaScript including "Try it Yourself" examples. Also provides insight into advanced topics.
- Awesome JS: A collection of awesome browser-side JavaScript libraries, resources and shiny things for beginners to advanced programmers
Security
JavaScript and the DOM provide the potential for malicious authors to deliver scripts to run on a client computer via the Web. Browser authors contain this risk using two restrictions. First, scripts run in a sandbox in which they can only perform web-related actions, not general-purpose programming tasks like creating files. Second, scripts are constrained by the same origin policy: scripts from one Web site do not have access to information such as usernames, passwords, or cookies sent to another site. Most JavaScript-related security bugs are breaches of either the same origin policy or the sandbox.
Content Security Policy is the main intended method of ensuring that only trusted code is executed on a Web page.
XSS is a frequent type of attempting to steal data or harm a website via JavaScript.
Useful Tools
- Browser Developer ToolsFirefox Developer EditionFirefox Developer Tools (documentation)Developer Tools for IEChrome Developer Tools for ChromeWeb Inspector for Safari
- Ways to provide live demosSnippets for including live demos in questionsJSFiddle for testing snippets (online)Plunker for testing snippets (online)JSBin for testing snippets (online/offline)CodePen for testing snippets (online)Liveweave for testing snippets (online)
- Error detection and best practice testingJSHintESLintStandardJS
- Code formattingBeautifier for JavaScript
- Code MinificationJavaScript Minifier
- Performance Benchmarking PlaygroundJSBEN.CHJSBench.Me
Interactive JavaScript learning
- Codecademy | JavaScript: Learn the fundamentals of JavaScript and dynamic programming.
- Udacity | Programming Languages: Key concepts include specifying and processing valid strings, sentences, and program structures.
- Code School: Learn the fundamentals of JavaScript and dynamic programming.
- Khan Academy: Best to learn about animations.
- Codewars: Learn patterns and train on quizzes posted from community members
Useful links
- Wikipedia reference
- Native JavaScript Equivalents of jQuery Methods
- MDN JavaScript Reference
- W3C DOM Core, HTML, events and CSS compatibility tables from https://www.quirksmode.org/
- JSLint code quality tool by Douglas Crockford (and JSHint, a community-driven branch of the original)
- Code minifiers/obfuscators: /packer/, YUI Compressor, Google Closure Compiler, UglifyJS
- Code formatter/deobfuscator: JSBeautifier
- Idioms and Gotchas: Rounding, Date Object, Number Object, Scope Chain
- JavaScript Garden
- comp.lang.javascript FAQ: Very extensive guide on JavaScript quirks created by Usenet's comp.lang.javascript
- ECMA 262-5 Online: HTML version of the ECMAScript 5 specification.
- Annotated ES5: Annotated and hyperlinked HTML derivative of the ECMAScript 5 specification.
- HTML ECMAScript 6 specification.
- ECMAScript Support Matrix: In-depth feature list for ECMAScript implementations.
- ES6 compatibility table
- JavaScript Weekly: A free, weekly newsletter curated by Peter Cooper
- Node Weekly: A free, weekly newsletter
- Operator Precedence: Operator precedence and associativity table
- Opera Mini support for JavaScript: The way JavaScript works in Opera Mini, a web-browser used be people who need to optimize browsing resources
- https://nodeschool.io Practice examples here : https://github.com/workshopper/javascripting
- JS Comparison Table: Complete table of equality sign in JavaScript
Free JavaScript Programming Books
- Crockford's JavaScript
- Eloquent JavaScript
- You Don't Know JS
- Essential JavaScript & jQuery Design Patterns for Beginners
- JavaScript Essentials
- jQuery Fundamentals (starts with JavaScript basics)
- Mozilla Developer Network's JavaScript Guide
- Enterprise Web Development: From Desktop to Mobile
- Learning JavaScript Design Patterns - Addy Osmani
- Patterns For Large-Scale JavaScript Development - Addy Osmani
- JS Books - Free JavaScript Books
Videos
Example JavaScript code
This script displays "Hello World" on your screen.
window.onload = function() {
alert('Hello World!');
};
More information:
- Wikipedia on JavaScript
- MDN - Learn JavaScript
- Creator of JavaScript, Brendan Eich, explains the origin