为什么我的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"; }); 
Interesting Posts