88

我正在开发一个应用程序,不必担心 Internet Explorer,并且正在研究 A+ 级浏览器中存在的一些功能,这些功能不在 Internet Explorer1 中。

我想玩的这些功能之一是JavaScript 的 let 关键字

我似乎无法让他们的任何“让”示例在 Firefox 3.6 中工作(用户代理字符串: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))。我SyntaxError: missing ; before statement在执行时得到let foo = "bar".

那么,哪些浏览器支持 let 关键字呢?(或者我做错了什么?)

4

7 回答 7

63

编辑:所有现代浏览letconst都支持并且是ECMAScript 2015 (ES6)规范的一部分。

基本上,如果您不需要支持 IE11 以下的任何内容,let并且const现在可以安全使用。

IE11let上,与循环一起使用时有一个小怪癖,变量没有像您期望的那样for绑定到块,它的行为就像...forvar

另请参阅:letconst支持。


2010 年过时的旧答案: 这些扩展不是 ECMA 标准,它们仅受 Mozilla 实施支持。

在浏览器环境中,您应该在标签中包含 JavaScript版本号以使用它:script

<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>
于 2010-03-01T15:39:35.460 回答
33

截至 2017 年 4 月:

  • 所有最新的主流浏览器,例如 Chrome、Firefox 和 Edge 都支持 ES2015(又名“ES6”)let关键字。

  • iOS Safarilet直到 OS 10 才支持(例如,OS 9 不支持)。

  • 一些较旧的浏览器,例如 IE9-IE11,支持早期版本let支持 ES2015 定义的语义(特别是与for循环头中的声明有关)。所以这不是语法错误,它确实声明了变量,但它没有按预期的方式工作。例如,在正确的实现中,以下日志 0、1 和 2;在 IE9-IE11 上,它记录 3、3、3:

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

  • IE8等过时的浏览器根本不支持。

于 2017-04-06T16:28:59.477 回答
25

Internet Explorer 11 中部分支持(for范围不正确)和所有当前浏览器中的完全支持(ECMAScript 6 兼容性表:let)。

于 2013-08-25T19:01:21.810 回答
12

Internet Explorer 和Opera不支持let任何浏览器版本,Firefox 自 2.0 版和 Safari 自 3.2 版以来。

请参阅 Wikipedia 上的此JavaScript 版本表

我刚刚发现您需要定义是否使用 JavaScript 1.7。所以你的代码将是:

<script type="application/javascript;version=1.7"> ... </script>
于 2010-03-01T15:33:06.953 回答
6

显然,边缘模式下的Internet Explorer 10支持每个JavaScript 版本信息let

于 2013-07-07T20:27:58.120 回答
3

自从第一次提出这个问题以来已经过了很长时间:ECMAScript 2015 (ES6) 中引入了“let”和“const”关键字。在这个很棒的 ES6 兼容性表中搜索“let”或“const”: https ://kangax.github.io/compat-table/es6/

于 2016-06-10T13:04:38.210 回答
2

只是一个更新:Chrome 现在支持let,但前提是您声明"use strict"; 指示。

于 2015-06-08T12:06:59.840 回答