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 使用动态导入时找不到模块

未捕获的错误:Bootstrap 的 JavaScript 在 Angular 4 上需要 jQuery

Javascript Handsontable - 未捕获的类型错误:无法读取未定义的属性“insertBefore”