为啥我的 JavaScript 在 Safari 的严格模式下无法正常工作?

Posted

技术标签:

【中文标题】为啥我的 JavaScript 在 Safari 的严格模式下无法正常工作?【英文标题】:Why is my JavaScript not working correctly in strict mode on Safari?为什么我的 JavaScript 在 Safari 的严格模式下无法正常工作? 【发布时间】:2016-05-14 16:05:44 【问题描述】:

我建立了一个使用一些简单 javascript 的网站。经过一些测试,我发现我的 JavaScript 在 ios 设备上的行为与我可以测试的所有其他设备相比非常不同。

经过几个小时的反复试验,我发现只有在严格模式下才会出现意外行为,但是由于我的 Apple 开发软件/硬件有限,因此很难进一步解决问题测试。

为什么我的代码不能在严格模式下运行,并且只能在某些(尤其是 Apple)设备上运行?

【问题讨论】:

关于代码是什么的任何提示? 我真的只是想结合我给出的答案发布这个问题,因为我认为它可能能够帮助将来遇到相同或类似问题的人。对于这种特定情况,我认为代码并不完全相关。 【参考方案1】:

可能的问题

您的问题可能是您在启用严格模式的情况下进行了const 声明。


一个可能的解决方案

如果是这种情况,并且您想继续使用严格模式,一种解决方案是使用var 而不是const,并且更小心地将变量视为常量。


更多关于这个问题

实际上,如果没有 OS X 计算机,调试这个问题是很困难的,因为你无法使用 iOS Safari 的远程控制台“Web Inspector”。

但是,according to caniuse,对于当前版本的 Safari 和 iOS Safari(在撰写本文时分别为 9.1 和 9.3)const 是:

只有在非严格模式下才被识别

您可以使用以下示例 (or this JSFiddle) 自行测试。这段代码在 Ubuntu 和 android 上的 Chrome 和 Firefox 上按预期工作,但在 iOS 或 iOS Safari 上的 Firefox 上没有。

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";
);

【讨论】:

以上是关于为啥我的 JavaScript 在 Safari 的严格模式下无法正常工作?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这些 Javascript for 循环在 Firefox 上比 Chrome / Safari 慢得多?

为啥 javascript 对象在 Chrome、Firefox、Safari 的控制台中显示不同的值? [复制]

为啥我的 JavaScript 没有提升函数?

为啥我的 couchapp 没有在 Safari 11.1 上显示?

为啥 UIWebView 不能在 Safari 中打开我的链接?

为啥我的网站在 Mac 上的 safari 上滚动过度?