为啥我的 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 上没有。
<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 的控制台中显示不同的值? [复制]
为啥我的 couchapp 没有在 Safari 11.1 上显示?