访问未定义的对象属性时的Javascript通知

时间:2016-01-31 20:34:20

标签: javascript compiler-errors

我认为Javascript正试图杀了我。编译器以任何静态类型语言(包括FORTRAN)捕获的错误,或者在任何体面的动态类型语言中变成运行时异常的错误都会被Javascript静默吞噬,耐心等待在其他地方显示为错误。

每当我们编写前端代码(现在使用Angular)时,我们会花费大部分时间来查找错误,例如编写$scope.result = data.results而不是data.result。虽然有些工具有所帮助,但仍然需要大量的工作。

当有人试图读取不存在的对象属性时,有没有办法让Javascript环境(在浏览器中)记录警告?我不想更改语言的语义 - 访问data.results仍应返回undefined,我只想在控制台上看到警告说“不存在”访问的属性,文件...行..."。

3 个答案:

答案 0 :(得分:2)

我认为这是这个问题的重复:Force JavaScript exception/error when reading an undefined object property?

简而言之:对于您的用例没有令人满意的解决方案,但是如果您都使用firefox,则可以使用javascript.options.strict设置为true来在这种情况下发出警告:)

答案 1 :(得分:1)

在ECMAScript 2015中,您可以使用Proxy执行此操作,例如:

function createObject(obj) {
    const handler = {
        get: function(target, name){
            if (name in target) {
                return target[name];
            } else {
                console.warn("accessing undefined object property: " + name);
                return undefined;
            }
        }
    };
    return new Proxy(obj, handler);
}


let a = createObject({
    b: 1,
    c: undefined
});

a.b;
a.c;
a.d; // accessing not existing object property: d

答案 2 :(得分:0)

这可能看起来很业余,但您可以将所有变量存储在一个循环的对象(如数组或对象)中,然后遍历它们以检查它们中是否有undefined,然后打印结果。您可以使用key:value对的字典。但不太理想。