Questions tagged [javascript]

JavaScript (not to be confused with Java) is a dynamic, weakly-typed language used for client-side as well as server-side scripting. Use this tag for questions regarding ECMAScript and its various dialects/implementations (excluding ActionScript and Google-Apps-Script). Unless another tag for a framework/library is also included, a pure JavaScript answer is expected.

JavaScript is a dynamic, object-based, duck-typed, prototype-based, weakly typed language traditionally used for client-side scripting in web browsers. can also be run outside of the browser with the use of a framework like , , , or . 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 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 at the time.

Standalone JavaScript engines or interpreters are available as well, including:

  • Mozilla's , the first JavaScript engine ever written, currently used in Mozilla Firefox.
  • , Google's JavaScript interpreter, used in Google Chrome.
  • , a cloud-based / server-side interpreter that provides programmatic "macro-like" control of Google Apps services and documents.
  • , built on top of , a platform which enables server-side applications to be written in JavaScript.
  • Windows includes , a JavaScript variant in Windows Script Host.
  • Mozilla also offers , an implementation of JavaScript built in Java, typically embedded into Java applications to provide scripting to end users.
  • (except for the Chromium project) implements the engine.
  • (originally derived from HyperTalk) is now an ECMAScript dialect and uses a lot of ECMAScript APIs.
  • Embeddable, portable ECMAScript engine in C with small memory footprint.
  • a framework, IDE, and Server built on supporting server-side JavaScript
  • 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 docs )

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 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, amongst others.

The current version of ECMAScript is version 7 (), properly known as ECMAScript 2016, which was finalized in June 2016.


When asking a JavaScript question, you should:

  1. Debug your JavaScript code (see Creativebloq, MDN, Google, & MSDN).
  2. Isolate the problematic code and reproduce it in a Stackoverflow code snippet or an external online environment such as JSFiddle or JS Bin (remember to also include the code in the question itself).
  3. If a library or framework is used, then tag the question with the appropriate tags: for jQuery, for Prototype, for MooTools, and so on. However, if a framework is not used or necessary, do not include these tags.
  4. 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 , , , , , ,etc.
  5. Only tag the question as or 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

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.

Useful Tools

Interactive JavaScript learning

Wisdom from the Stack

Useful links

Free JavaScript Programming Books

Videos


Example JavaScript code

This script displays "Hello World" on your screen.

window.onload = function() {
   alert('Hello World!');
}

Demo!


Frequently Asked Questions

Find some answers to some of the more frequently asked questions about JavaScript and related technology below.

Q: I have this JSON structure, how can I access property x.y.z?
A: http://stackoverflow.com/q/11922383

Q: I'm adding events in a for loop but all handlers do the same thing, why?
A: http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example

Q: I want to compare something against multiple values, is there an easy way to do it?
A: http://stackoverflow.com/questions/13737091/concise-way-to-compare-against-multiple-values

Q: How to set up proper inheritance?
A: http://stackoverflow.com/questions/11072556/objects-dont-inherit-prototyped-functions/11072626

Q: How do JavaScript closures work?
A: http://stackoverflow.com/questions/111102/how-do-javascript-closures-work/

Q: Why does setTimeout() inside a for loop always use the latest value?
A: http://stackoverflow.com/questions/5226285

Q: How to return the response from an AJAX call from a function?
A: http://stackoverflow.com/questions/14220321

Q: Why don't my handlers hooked up in a loop work correctly, and what can I do about it?
A: http://stackoverflow.com/questions/16794707/javascript-generate-dynamically-handler/16794762#16794762

Q: How can I get query string values?
A: http://stackoverflow.com/questions/901115

Q: What does “use strict” do in JavaScript?
A: http://stackoverflow.com/questions/1335851/what-does-use-strict-do-in-javascript-and-what-is-the-reasoning-behind-it

Q: How can I make a redirect page in jQuery/JavaScript?
A: http://stackoverflow.com/questions/503093/how-can-i-make-a-redirect-page-in-jquery-javascript

Q: How to sort an array of objects by a property value?
A: http://stackoverflow.com/questions/1129216/sorting-objects-in-an-array-by-a-field-value-in-javascript

Q: I'm adding elements with JavaScript or jQuery at a later point and adding events but they're not firing, why?
A: You might want event delegation.

Q: How can I only keep items of an array that match a certain condition?
A: http://stackoverflow.com/questions/27131984/how-can-i-only-keep-items-of-an-array-that-match-a-certain-condition

Q: How can I debug my JavaScript code?
A: http://stackoverflow.com/questions/988363/how-can-i-debug-my-javascript-code

More information:

Chat Room

189 questions
3
votes
3 answers

Set MIME type of PHP generated JavaScript file

I have a dynamically created .js file by PHP. For this to work I added the following to an Apache .htaccess file: AddHandler application/x-httpd-php .js AddType application/javascript .js But the .js files are sent with the MIME type text/html. How…
pimvdb
  • 147
  • 1
  • 2
  • 7
3
votes
3 answers

IE8 script error 800704a6?

We have a user who suddenly started getting the following error when trying to open some web apps using window.open from within an embedded web browser in our software The script uses javascript's window.open command, and it works absolutely fine…
Rachel
  • 640
  • 4
  • 12
  • 22
3
votes
4 answers

Has my site been attacked?

This is about an online store based on Drupal 5. All of a sudden it didn't work anymore. Upon accessing the site, this error came up: Parse error: syntax error, unexpected '<' in /home/public_html/index.php on line 38 Upon further inspection I…
fretje
  • 1,644
  • 1
  • 14
  • 15
3
votes
3 answers

Apache: How can I serve JavaScript via PHP?

I want to serve my JavaScript files via a PHP script. An example would be: If I were to request a JavaScript file called dir/my_file.js The server should redirect the request to a handler script called my_script_server.php?src=dir/my_files.js How…
Christian Toma
  • 160
  • 1
  • 8
3
votes
1 answer

How to create a CSP nonce and yet continue website caching?

I am not getting any response to any way I try to phrase this question, so I keep trying. I feel I've got to be missing something, but I've searched and searched. Why isn't it obvious? Why is it so hard to get an answer? We are told we should use a…
3
votes
0 answers

What is the solution to caching vs using a CSP nonce? I've been searching for a while, and haven't found it

I've never seen a good answer to this dilemma, and I've been searching high and low. It seems it is a choice between using a nonce and caching, you can't have both. Really bad choice! We're told 'unsafe-inline' is a really bad choice in CSP, and yet…
2
votes
1 answer

Renaming the index.html on Google App Engine

Ok, let me 1st come clean. I mistakenly added a 365d expiration date to my index.html file. I've now made a change to a JS file, which changed the name of the import in my index.html and now it's trying to import the wrong file. Oops. So I'm…
2
votes
1 answer

nginx connection refused while connecting to upstream

I have a server on which I've deployed an API (Sinatra). I run that API on port 9292 and proxy requests to it. I also need to deploy a static javascript file and its supporting resources. I do that on the same server. All of the information below…
RubyRedGrapefruit
  • 501
  • 3
  • 6
  • 17
2
votes
2 answers

Proxy website that uses javascript to change window.location?

Little bit of a newb when it comes to configuring httpd but here's my situation: I'm trying to proxy an application (let's call it catsapp) that I have no control over with httpd. catsapp, an html/javascript application, has httpd running in front…
FGreg
  • 530
  • 3
  • 10
2
votes
1 answer

CSP nginx nonce

I have some problems with adding CSP to my site. I configured Content-Security-Policy-Report-Only in my nginx configuration. And i get this. adsbygoogle.js:37 [Report Only] Refused to apply inline style because it violates the following Content…
2
votes
0 answers

Is there a non-invasive test of uPnP enabled network?

I'm trying to figure out if there is a way to do a non-invasive test on different networks to see if Universal Plug'n'Play (nPnP) is enabled at the router. i.e. Is Internet Gateway Device Profile implemented at the router? I'm thinking of a webpage…
zipzit
  • 121
  • 5
2
votes
0 answers

From Http to Https NodeJS Websockets on Apache Server

Here is my problem. I have a virtual machine, on windows, the Apache server (2.4) is installed on it. The vm is on the network, so that other people can reach it directly on http://192.168.100.22 (ACTUALLY) First, everything was going fine with http…
Julo0sS
  • 163
  • 2
  • 6
2
votes
0 answers

Can't go to route using nginx and Express.JS

So I have express.js set up behind nginx and when I go to website.com/users, I get a 404. But when I go to website.com, the page loads fine. This appears to be all other routes too, I can't get to website.com/public/css either. Here's my nginx…
John
  • 29
  • 3
2
votes
0 answers

nginx proxy with CAS

I have a JS application that issues REST calls from the client browser to a data source that sits behind nginx. We need to implement CAS authentication for the application to manage access. However I am not sure how to implement the CAS piece for…
nick_v1
  • 365
  • 2
  • 3
  • 11
2
votes
2 answers

After loading a certain number of javascript/css files, the files are taking too long to load

I have a problem where on page load (after a certain number of .js or .css files) the files are taking way too long to load. At first I thought that the issue must be inside the .js files, but later I realised that the content is irrelevant, I tried…
1
2
3
12 13