我正在我的网站上做Javascript功能支持测试,但在IE11上测试时遇到了一个问题,在执行我的功能测试之前,这个问题导致了语法错误(由于默认参数)。
我的应用程序构建了一个脚本标记以注入到布局视图中。该脚本标记是使用定义所有JS依赖项的配置构建的。我已经确保交付给浏览器的结果JS文件在组合脚本的顶部(紧跟在jQuery之后)具有我的特征检测。但似乎正在发生的情况是,脚本中稍后定义的某个函数正在运行(或被解析?)在运行我的特征检测表达式之前。
为了更清楚起见,这是我的脚本标记的一个示例:
<script type="text/javascript" src="/asset/jscript?load=feature-detection,global,login&version=1820523616"></script>这将产生一个脚本文件,该文件首先包含jQuery,然后是我的feature-detection.js,然后是其他所有内容。这是特征检测后其中一个JS文件中导致语法错误的那一行:
processMessages: function(problem, container, useMessage = true) {...}编辑:
为了清楚起见,我不确定为什么语法错误会在特征检测逻辑之前发生,即使我的特征检测在代码中发生得更早。这是我的组合脚本的样子:
/* jQuery v3.2.0 ... */
// This is a placeholder for jQuery code
// Test browser support for 'for...of' statement.
// If this feature is lacking, ES6 support is lacking from the browser
try {
    eval("for (var i of []);");
} catch(ex) {
    // Show 'Unsupported Browser' banner
    alert('GET BETTER BROWSER');
}
// The rest of my JS files, which would contain several non-supported features
processMessages: function(problem, container, useMessage = true) {...}在IE11中永远不会触发"alert“,相反,我会得到指向默认参数函数的"Expected ')'”
发布于 2019-03-19 00:07:29
我很确定你不能在JS中那样使用默认参数值,这可能就是IE的问题所在。
你将不得不像这样默认它:
processMessages: function(problem, container, useMessage) {
  if (typeof useMessage === 'undefined') useMessage = true;
}发布于 2019-03-19 01:04:03
Javascript先编译后执行,这是一个多阶段的过程。
您的语法错误将发生在编译周期(或解释时),这就是为什么您会在特性检测执行之前看到它。
我不是一个深入的js专家,所以我的术语可能是错误的,但这是你的问题背后的想法。
https://stackoverflow.com/questions/55225485
复制相似问题