为什么我的JavaScript在Safari的严格模式下无法正常工作?
我build立了一个使用一些简单的JavaScript的网站。 经过一些testing后,我发现我的JavaScript在iOS设备上的performance与我可以testing的所有其他设备相比有很大不同。
经过几个小时的反复试验,我发现意外的行为只发生在严格的模式下,但是由于我在苹果开发和testing的软件/硬件方面有限,所以很难进一步排除这个问题。
为什么我的代码不能在严格的模式下工作,只有某些(苹果,特别是)设备?
可能的问题
你的问题可能是你已经使用严格模式启用了一个const
声明。
可能的解决scheme
如果是这样的话,你想继续使用严格模式,一种解决scheme是使用var
而不是const
,并且更简单地将variables视为一个常量。
更多关于这个问题
实际上,如果没有OS X计算机,则无法debugging此问题,因为您无法使用iOS Safari的远程控制台“Web Inspector”。
不过, 根据caniuse的说法 ,对于Safari和iOS Safari的当前版本(分别为9.1和9.3,写入时) const
是:
只有在非严格模式下才能识别
你可以使用下面的例子( 或者这个JSFiddle )为自己testing一下。 这个代码在Ubuntu和Android上都可以像Chrome和Firefox一样按预期工作,但是在iOS或iOS Safari浏览器上不能。
HTML
<pre></pre> <form> <input type="submit"> </form>
JS
"use strict"; var form = document.querySelector("form"); var info = document.querySelector("pre"); // This const declaration in conjunction with strict mode will // cause this script not to work on iOS devices const _MEANINGLESS = 0; form.addEventListener("submit", function(event) { event.preventDefault(); info.textContent = "Submit event captured.\n"; });