javascript - 为什么我的 JavaScript 在 Safari 上的严格模式下不能正常工作?

标签 javascript ios macos safari strict-mode

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

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

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

最佳答案

可能的问题

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


可能的解决方案

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


关于这个问题的更多信息

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

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

Only recognized when NOT in strict mode

您可以使用以下示例 (or this JSFiddle) 自行测试。这段代码在 Ubuntu 和 Android 上使用 Chrome 和 Firefox 时对我来说都按预期工作,但在 Firefox for 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";
});

关于javascript - 为什么我的 JavaScript 在 Safari 上的严格模式下不能正常工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37228892/

相关文章:

javascript - 遍历 html 嵌套列表,后续问题 - 检测节点的位置

javascript - 为什么我无法将参数传递到 .then 函数(AngularJS)?

ios - 如何在 Firebase iOS 上进行浅查询?

objective-c - 按下 Tab 时 NSTextView 中的奇怪行为(即使设置了 tabStops)

macos - 我不能运行超过 100 个进程

javascript - 将字符串值存储到循环内的数组

javascript - 调试 react : breakpoint not stopping in componentDidUpdate as expected

ios - 轻量级迁移完成通知

ios - Gmsmap 快速旋转 View

ios - xcode中 "undefined symbols for architecture x86_64"和 "linker command failed with exit code 1"如何解决?