JavaScript短路仍然抛出未定义的错误
我正在使用AngularJs中的一些旧代码。JS以太中可能存在一个变量JavaScript短路仍然抛出未定义的错误,javascript,undefined,short-circuit-evaluation,Javascript,Undefined,Short Circuit Evaluation,我正在使用AngularJs中的一些旧代码。JS以太中可能存在一个变量someVar1,如果存在,我想将其附加到我的作用域中,如下所示: $scope.someVar2 = someVar1 || 0; 但偶尔,当以太中不存在someVar1时,我会出现以下错误: 错误:未定义someVar1 它直接指向JS文件中someVar1的行和列 为什么会这样?我的印象是someVar1 | | 0会检查someVar1是否未定义,这是错误的,并将$scope.someVar2设置为0。要使someV
someVar1
,如果存在,我想将其附加到我的作用域中,如下所示:
$scope.someVar2 = someVar1 || 0;
但偶尔,当以太中不存在someVar1
时,我会出现以下错误:
错误:未定义someVar1
它直接指向JS文件中someVar1
的行和列
为什么会这样?我的印象是
someVar1 | | 0
会检查someVar1
是否未定义,这是错误的,并将$scope.someVar2
设置为0。要使someVar1
可能未定义,必须首先声明此变量
在您的情况下,负责定义someVar1
的代码可能会在此脚本之后调用(或者永远不会调用)
我建议首先检查一下这个
作为黑客,您可以使用typeof
检查变量是否是自己定义的
typeof
不会在变量未定义时抛出ReferenceError
错误,而是在变量未定义或具有未定义值时回复未定义值
例如,您的代码可以如下所示:
$scope.someVar2=typeof(someVar1)!=“未定义”?someVar1:0;
参考资料:很遗憾,我不能。主要是因为someVar1在另一个文件中,我相信有时文件甚至没有加载,这就是为什么它没有定义。问题主要是,为什么短路没有捕捉到未定义的东西?@palaѕѕаI能够模拟这一点,并添加了gpouilloux的修复。好的,如果你想调查的话,我还将一个问题链接为重复问题。它非常接近,特别是因为这个问题的答案是你链接的问题的答案之一。我看到的区别是,我在问更多的问题,为什么短路没有抓住它,因为“未定义”是错误的。我的问题的答案解释了引用变量会抛出错误,而不是在短路中检查未定义。你能在你的答案的某个地方添加typeof(someVar1)==“未定义”,我会接受它吗?是的,我刚刚更新了我的答案