在IE 8/9中使用"use strict"是否安全?

9
根据http://caniuse.com/use-strict,IE 8/9不支持'use strict'。我的问题是,在不兼容'use strict'的IE 8/9或其他浏览器中使用它是否真的安全?会破坏我的代码吗?

注意事项已经说明了一切,详细内容请查看文章:http://msdn.microsoft.com/zh-cn/library/br230269(v=vs.94).aspx - user3348703
2个回答

18
声明 "use strict"; 不应该引起IE8/9的问题,因为这些浏览器将运行代码。(它是这样设计的,以确保在不实现严格模式的浏览器中没有问题)。
外部来源:http://ejohn.org/blog/ecmascript-5-strict-mode-json-and-more/

这意味着您可以在您的脚本中启用严格模式-今天-并且最坏的情况下,在旧浏览器中不会有副作用。

注意:正如Jeremy在评论中指出的那样,有一些表达式在技术上是有效的,但在IE8中将失败(例如:var x = {}; x.break = true 将无法在IE8中工作,即使它在IE9中可以工作)。

4
大部分是正确的。在严格模式下允许一些语法,但在非严格模式下则会失败。特别是将关键字用作对象属性。在严格模式下,myObject.break = true是可行的,但在非严格模式下会失败。 - Jeremy J Starcher
@JeremyJStarcher 看起来 var x = {}; x.break = true 在 IE9 中可以工作(我刚在 f12 中测试了一下)。你有 IE9 的访问权限并且可以验证吗? - SheetJS
在IE7(Quirks模式)中失败 - 使用开发人员工具更改并重试。我的观点是,严格模式并不总是与非严格模式完全兼容。 - Jeremy J Starcher
@JeremyJStarcher 在IE7(Quirks)中可以工作,但在IE7(IE7标准)中失败。有趣的是,x["break"]可以工作。我想知道这是否由于ES3和ES5之间的某些不一致性造成的。无论如何,你在技术上是正确的。 - SheetJS
x["break"]在ES3中可行,但是如果属性名是关键字,ES3不允许使用点表示法。这是一个愚蠢的残留问题,在ES5中已经解决了。这是一个很少有人意识到的特例,但是在我参与的各个团队中,它曾多次给我带来麻烦。我认为一些ES5引擎在严格/非严格模式下没有遵守这个规则。 - Jeremy J Starcher
3
在基于ES3的引擎/浏览器(IE 8及更早版本)中,myObject.break = true只会导致SyntaxError。一般情况下,无论是否使用严格模式,ES5都允许这样做。当需要Identifier时,保留字仅在ES5中被禁止,而点表示法则需要IdentifierName - Jonathan Lonowski

3

没问题,应该没问题。

use 指令是为了向后兼容而设计的。不支持它们的浏览器只会看到一个未被引用的 String 字面量。所以,它们会跳过它并继续执行。

不过,你仍然需要确保在启用和禁用它的情况下都测试你的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接