Javascript使用严格的错误没有捕获

时间:2014-08-25 05:22:33

标签: javascript backbone.js error-handling try-catch use-strict

我正在创建一个使用require.js for AMD的backbone.js应用程序。为了在浏览器中检查use strict支持,我已经包含以下代码。但是,当代码运行时,var o = {p:1, P:2}抛出的错误不会像我预期的那样被捕获,而是会杀死整个页面。

Chrome控制台会输出以下错误: 未捕获的SyntaxError:严格模式下不允许在对象文字中复制数据属性

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
            }
        }
    }();
});

为什么错误导致我的页面崩溃而不是被抓住?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

如果要检查严格模式支持,请考虑:

function supportsStrict() {
  'use strict';
  return typeof function(){return this;}() == 'undefined';
}

console.log(supportsStrict()); // true if supports strict mode

这样,您可以独立测试并根据结果运行不同的代码分支。