根据http://caniuse.com/use-strict,IE 8/9不支持
'use strict'
。我的问题是,在不兼容'use strict'的IE 8/9或其他浏览器中使用它是否真的安全?会破坏我的代码吗?'use strict'
。我的问题是,在不兼容'use strict'的IE 8/9或其他浏览器中使用它是否真的安全?会破坏我的代码吗?"use strict";
不应该引起IE8/9的问题,因为这些浏览器将运行代码。(它是这样设计的,以确保在不实现严格模式的浏览器中没有问题)。注意:正如Jeremy在评论中指出的那样,有一些表达式在技术上是有效的,但在IE8中将失败(例如:这意味着您可以在您的脚本中启用严格模式-今天-并且最坏的情况下,在旧浏览器中不会有副作用。
var x = {}; x.break = true
将无法在IE8中工作,即使它在IE9中可以工作)。myObject.break = true
是可行的,但在非严格模式下会失败。 - Jeremy J Starchervar x = {}; x.break = true
在 IE9 中可以工作(我刚在 f12 中测试了一下)。你有 IE9 的访问权限并且可以验证吗? - SheetJSx["break"]
可以工作。我想知道这是否由于ES3和ES5之间的某些不一致性造成的。无论如何,你在技术上是正确的。 - SheetJSx["break"]
在ES3中可行,但是如果属性名是关键字,ES3不允许使用点表示法。这是一个愚蠢的残留问题,在ES5中已经解决了。这是一个很少有人意识到的特例,但是在我参与的各个团队中,它曾多次给我带来麻烦。我认为一些ES5引擎在严格/非严格模式下没有遵守这个规则。 - Jeremy J StarchermyObject.break = true
只会导致SyntaxError。一般情况下,无论是否使用严格模式,ES5都允许这样做。当需要Identifier时,保留字仅在ES5中被禁止,而点表示法则需要IdentifierName。 - Jonathan Lonowski没问题,应该没问题。
use
指令是为了向后兼容而设计的。不支持它们的浏览器只会看到一个未被引用的 String
字面量。所以,它们会跳过它并继续执行。
不过,你仍然需要确保在启用和禁用它的情况下都测试你的代码。