Javascript 使用严格错误未捕获
Posted
技术标签:
【中文标题】Javascript 使用严格错误未捕获【英文标题】:Javascript use strict error not catching 【发布时间】:2014-10-18 05:20:18 【问题描述】:我正在为 AMD 创建一个使用 require.js 的主干.js 应用程序。为了检查浏览器中对use strict
的支持,我包含了以下代码。然而,当代码运行时,var o = p:1, P:2
抛出的错误并没有像我预期的那样被捕获,而是杀死了整个页面。
Chrome 控制台打印此错误:Uncaught SyntaxError: Duplicate data property in object literal not allowed in strict mode
require([
'jquery',
'underscore',
'backbone',
'src/app'
], function(jQuery, _, Backbone, App)
"use strict"
var tooOld = true,
isStrictMode = function ()
try
var o = p:1, p:2;
catch (e)
tooOld = false;
new App;
finally
if (tooOld)
// Display some message
();
);
为什么错误会导致我的页面崩溃而不是被捕获?我该如何解决这个问题?
【问题讨论】:
尝试在匿名函数中移动“use strict” 同样的结果。该错误继续逃避捕获...“使用严格”正在工作,因为否则此错误不会出现。 javascript try catch not fully working in firefox 的可能重复项 如果有替代方案,故意抛出错误并不是测试事物的好方法,请考虑类似:if (typeof (function()return this;()) == 'undefined') /*in strict mode*/
。
【参考方案1】:
如果您想检查严格模式支持,请考虑:
function supportsStrict()
'use strict';
return typeof function()return this;() == 'undefined';
console.log(supportsStrict()); // true if supports strict mode
这样您就可以独立测试并根据结果运行不同的代码分支。
【讨论】:
我最终使用了非常相似的东西:var isStrictMode = function () eval("var _temp = null"); if(typeof _temp === "undefined") new App; else jQuery("#oldBrowser").toggle();();
抱歉格式不好; cmets 不允许你做块代码。
我想这行得通,但是为什么在不需要时使用 eval 并且我没有看到分配的重点,请考虑:!function()if(this)jQuery("#oldBrowser").toggle();else new App()
。 ;-)以上是关于Javascript 使用严格错误未捕获的主要内容,如果未能解决你的问题,请参考以下文章
未捕获的语法错误:在严格模式之外尚不支持块范围的声明(let、const、函数、类)[重复]
JavaScript 未捕获类型错误:无法读取 null 的属性“样式”:按钮 Onclick 使 html 消失
Bootstrap 设置错误:未捕获 ReferenceError:未定义 jQuery 和未捕获错误:Bootstrap 的 JavaScript 需要 jQuery
未捕获的错误:对 JavaScript 使用动态导入时找不到模块