Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript短路仍然抛出未定义的错误_Javascript_Undefined_Short Circuit Evaluation - Fatal编程技术网

JavaScript短路仍然抛出未定义的错误

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

我正在使用AngularJs中的一些旧代码。JS以太中可能存在一个变量
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)==“未定义”,我会接受它吗?是的,我刚刚更新了我的答案