访问未定义的对象属性时的Javascript通知
我觉得Javascript想杀了我。任何静态类型语言(包括FORTRAN)中的编译器都会捕捉到错误,或者在任何合适的动态类型语言中变成运行时异常,这些错误都会被Javascript默默地吞没,耐心地等待在其他地方显示为bug 无论何时我们编写前端代码(现在使用Angular),我们都会花费大部分时间来查找错误,例如编写访问未定义的对象属性时的Javascript通知,javascript,compiler-errors,Javascript,Compiler Errors,我觉得Javascript想杀了我。任何静态类型语言(包括FORTRAN)中的编译器都会捕捉到错误,或者在任何合适的动态类型语言中变成运行时异常,这些错误都会被Javascript默默地吞没,耐心地等待在其他地方显示为bug 无论何时我们编写前端代码(现在使用Angular),我们都会花费大部分时间来查找错误,例如编写$scope.result=data.results,而不是data.result。虽然有些工具有帮助,但它仍然需要惊人的工作量 当有人试图读取不存在的对象属性时,是否有办法使Ja
$scope.result=data.results
,而不是data.result
。虽然有些工具有帮助,但它仍然需要惊人的工作量
当有人试图读取不存在的对象属性时,是否有办法使Javascript环境(在浏览器中)记录警告?我不想更改语言的语义-访问
数据。结果
仍应返回未定义
,我只想在控制台上看到一条警告,说“已访问不存在的属性,文件…行…”。这可能看起来很业余,但是,您可以将所有变量存储在一个可循环的对象(如数组或对象)中,然后循环检查其中是否有未定义的变量,然后打印结果。您可能可以使用带有key:value
对的词典。但并不理想。我认为这是这个问题的重复:
简而言之:对于您的用例没有令人满意的解决方案,但是如果您都使用firefox,您可以使用
javascript.options.strict
设置为true以在这种情况下发出警告:)在ECMAScript 2015中,您可以使用它来执行此操作,例如:
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
已尝试
try..catch
?访问对象中不存在的属性不会引发任何异常,它只会返回未定义的。我要抓住什么?我总是可以切换到打字脚本。我可能别无选择……我希望这是“自动”完成的,不需要对代码进行重大更改。人们应该像往常一样继续编码。是的,我想这可能是个问题。Firefox!我一定要试试,我真的希望它能奏效!所以我需要用这个代理来包装每个对象(有些是由外部代码创建的,比如Angular)。这还不错!如果Firefox是最简单的解决方案,我将首先尝试Firefox设置。