我认为Javascript正试图杀了我。编译器以任何静态类型语言(包括FORTRAN)捕获的错误,或者在任何体面的动态类型语言中变成运行时异常的错误都会被Javascript静默吞噬,耐心等待在其他地方显示为错误。
每当我们编写前端代码(现在使用Angular)时,我们会花费大部分时间来查找错误,例如编写$scope.result = data.results
而不是data.result
。虽然有些工具有所帮助,但仍然需要大量的工作。
当有人试图读取不存在的对象属性时,有没有办法让Javascript环境(在浏览器中)记录警告?我不想更改语言的语义 - 访问data.results
仍应返回undefined
,我只想在控制台上看到警告说“不存在”访问的属性,文件...行..."。
答案 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
对的字典。但不太理想。