What browsers currently support JavaScript's 'let' keyword?

JavascriptFirefoxfirefox3.6

Javascript Problem Overview


I'm developing an app and don't have to ever worry about Internet Explorer and was looking into some of the features present in A+ grade browsers that aren't in Internet Explorer1.

One of these features I wanted to play around with is https://developer.mozilla.org/en/New_in_JavaScript_1.7#let_definitions" title="New in JavaScript 1.7 - MDC">JavaScript's let keyword

I can't seem to get any of their 'let' examples to work in Firefox 3.6 (User-Agent string: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)). I get SyntaxError: missing ; before statement when executing let foo = "bar".

So, what browsers support the let keyword? (Or am I doing something wrong?)

Javascript Solutions


Solution 1 - Javascript

EDIT: let and const are supported by all modern browsers and are part of the ECMAScript 2015 (ES6) specification.

Basically if you don't need to support anything below IE11, let and const are safe to use nowadays.

On IE11 there's a small quirk with let when used with for loops, the variable is not bound to the for block as you would expect, it behaves as var did...

See also: let and const support.


Old and outdated answer from 2010: Those extensions are not ECMA-Standard, they are supported only by the Mozilla implementation.

On browser environments you should include the JavaScript version number in your script tag to use it:

<script type="application/javascript;version=1.7">  
  var x = 5;
  var y = 0;

  let (x = x+10, y = 12) {
    alert(x+y + "\n");
  }

  alert((x + y) + "\n");
</script>

Solution 2 - Javascript

As of April 2017:

  • All up-to-date major browsers such as Chrome, Firefox, and Edge support the ES2015 (aka "ES6") let keyword.

  • iOS Safari did not support let until OS 10 (e.g, OS 9 did not).

  • Some older browsers, such as IE9-IE11, support an early version of let but don't support the semantics defined by ES2015 (particularly in relation to declarations in the headers of for loops). So it's not a syntax error, and it does declare the variable, but it doesn't work the way it's supposed to. For instance, in a correct implementation, the following logs 0, 1, and 2; on IE9-IE11, it logs 3, 3, 3:

 for (let i = 0; i < 3; ++i) {
      setTimeout(function() {
          console.log(i);
       }, i * 100);
  }

  • Obsolete browsers such as IE8 do not support it at all.

Solution 3 - Javascript

There is partial support in Internet Explorer 11 (for scope is incorrect) and full support in all current browsers (ECMAScript 6 compatibility table: let).

Solution 4 - Javascript

Internet Explorer and Opera don't support let on any browser version, Firefox since version 2.0 and Safari since 3.2.

See this JavaScript version table on Wikipedia.

I just found out that you need to define whether you use JavaScript 1.7 or not. So your code will be:

<script type="application/javascript;version=1.7"> ... </script>

Solution 5 - Javascript

Apparently Internet Explorer 10 in Edge mode supports let, per JavaScript Version Information.

Solution 6 - Javascript

A great deal of time has passed since this question was first asked: the 'let' and 'const' keywords have been introduced in ECMAScript 2015 (ES6). Search for 'let' or 'const' in this awesome ES6 compatibility table: https://kangax.github.io/compat-table/es6/

Solution 7 - Javascript

Just an update: Chrome now supports let but only if you declare the "use strict"; directive.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavid MurdochView Question on Stackoverflow
Solution 1 - JavascriptChristian C. SalvadóView Answer on Stackoverflow
Solution 2 - JavascriptT.J. CrowderView Answer on Stackoverflow
Solution 3 - JavascriptsamView Answer on Stackoverflow
Solution 4 - JavascriptHarmenView Answer on Stackoverflow
Solution 5 - JavascriptjmorenoView Answer on Stackoverflow
Solution 6 - JavascriptPieter HeemeryckView Answer on Stackoverflow
Solution 7 - JavascriptMatthewView Answer on Stackoverflow