【问题标题】:What browsers currently support JavaScript's 'let' keyword?哪些浏览器目前支持 JavaScript 的 'let' 关键字?
【发布时间】:2011-01-22 08:17:21
【问题描述】:

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

我想玩的这些功能之一是JavaScript's let keyword

我似乎无法让他们的任何“让”示例在 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))。执行let foo = "bar" 时得到SyntaxError: missing ; before statement

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

【问题讨论】:

  • 虽然并理解并同意您的 not-caring-if-it-works 在 IE 上运行,但您应该考虑“let”关键字仅适用于 mozilla,因此即使可以说“IE 不支持” '不支持它",正确的说法是,"只有 Mozilla 支持它"。就像我们避免 IE-only 标签或关键字一样,您应该避免和 *-only 关键字。
  • Hugo,您需要记住,HTML、CSS、JS 不再是一个纯网络平台。代码恰好是永远不会在任何版本的 IE 或任何 web 浏览器中运行的代码。 :-)
  • Apple 到底想做什么......现在是 2015 年,他们可怜的浏览器没有迹象表明支持 let
  • 请注意许多较旧的答案(包括已接受的答案)已被事件取代。所有主要的最新浏览器都支持 ES2015(又名“ES6”)let 关键字,但在撰写本文时,支持在某些圈子中是相当新的(例如,只有 iOS 10 Safari)。
  • 我建议将您接受的答案更改为现在正确的答案之一。是的,目前被接受的那个在当时是正确的,但现在已经有好几年了,而且 SO 的目的是成为知识库,而不是历史档案。 :-)

标签: javascript firefox firefox3.6


【解决方案1】:

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

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

IE11 上,letfor 循环一起使用时有一个小怪癖,该变量没有像您期望的那样绑定到 for 块,它的行为与 var做了...

另请参阅:letconst 支持。


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

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

<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>

【讨论】:

  • 好吧;我刚刚更新了我的答案,然后发现你在一分钟内击败了我;)。 +1
  • 谢谢,我使用的是 HTML 5 的 '' 没有类型 attr。
  • 请注意,let 关键字现在在 ECMAscript 6(草案)标准中。
  • 可以在 Chrome 19+ 中通过“Experimental Javascript features”标志和在 node.js 中使用 --harmony 启用。
  • 在 Firefox 中仍然需要 ;version=1.7 吗?我在控制台中尝试了let,它成功了。
【解决方案2】:

截至 2017 年 4 月:

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

  • 在 OS 10 之前,iOS Safari 不支持 let(例如,OS 9 不支持)。

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

     for (let i = 0; i < 3; ++i) {
          setTimeout(function() {
              console.log(i);
           }, i * 100);
      }
     
  • IE8等过时的浏览器根本不支持。

【讨论】:

  • 一个有用的答案:+1。
【解决方案3】:

在 Internet Explorer 11 (for scope is incorrect) 中提供部分支持,在所有当前浏览器 (ECMAScript 6 compatibility table: let) 中提供完全支持。

【讨论】:

  • 虽然 IE11 确实“支持”let 关键字(因为它不会抛出 SyntaxError),但它的实现不符合规范 - 变量没有正确的块范围. (另请注意,11 之后没有也永远不会有任何 IE)
【解决方案4】:

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

在维基百科上查看JavaScript version table

I just found out 您需要定义是否使用 JavaScript 1.7。所以你的代码将是:

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

【讨论】:

  • 现在似乎不推荐使用此版本规范。如果我尝试指定版本,Chrome 不会加载该 javascript。
  • 浏览器版本支持信息已过时。
【解决方案5】:

显然Internet Explorer 10Edge 模式下支持let,每个JavaScript Version Information

【讨论】:

    【解决方案6】:

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

    【讨论】:

      【解决方案7】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 1970-01-01
        • 2012-02-04
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        相关资源
        最近更新 更多