【问题标题】:Javascript strict mode and versionsJavascript 严格模式和版本
【发布时间】:2015-06-29 11:23:24
【问题描述】:

我想在我的代码中使用let。像这样:

"use strict";

var b = 5;
for(let i =0;b > i; i++){
    alert(i);
}

这适用于 Chrome 和 IE。但不是在 Firefox 中。

将我的代码包装在脚本标签中,并将 type 属性设置为“application/javascript;version=1.7”,如下所示:

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

这修复了 Firefox 中的问题,但破坏了 Chrome 和 IE 中的代码。 当我执行第一个代码 sn-p 时,Firefox 给我的错误:

SyntaxError: let 是一个保留标识符

有没有办法支持所有浏览器?

【问题讨论】:

  • Iirc application/javascript;version= 只是在不破坏兼容性的情况下允许新的 ES6 功能的提议解决方案。我不认为这是标准的,应该使用feature testing

标签: javascript


【解决方案1】:

避免使用 let,除非您使用转码器/转译器将您的 js 转换为当前广泛支持的代码。

让我们成为 ECMA-262 的标准,但要让足够多的访问者原生支持它来使用它还需要几年的时间。

以下对let有基本的支持,下面的一切都会崩溃:

  1. 铬 41+
  2. 壁虎 2.0
  3. IE11
  4. Opera 17+
  5. Safari ??

以上浏览器此时可能存在不一致的实现,因此最好避免。

查看babel 进行转换。

【讨论】:

    【解决方案2】:

    Firefox 尚不支持 ES2015 (ES6) 中定义的 Let。它有一个旧版本的let,它是非标准的,工作方式略有不同。

    目前在所有浏览器中支持它的方法是使用像 BabelJS 这样的转译器。

    【讨论】:

    • 有没有比做这样的事情更好的方法? &lt;script type="application/javascript;version=1.7"&gt;if firefox.. code&lt;/script&gt;&lt;script&gt;normal code&lt;/script&gt;
    • @Mathijs 不起作用,请不要这样做。在 firefox let 中的工作方式与在 ECMAScript 2015 (ES6) 中不同,请使用转译器。
    猜你喜欢
    • 2011-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-13
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多