JavaScript短路仍然引发未定义的错误[重复]
Posted
技术标签:
【中文标题】JavaScript短路仍然引发未定义的错误[重复]【英文标题】:JavaScript Short-Circuit Still Throws Undefined Error [duplicate] 【发布时间】:2020-09-15 18:59:52 【问题描述】:我正在使用 AngularJs 中的一些旧代码。 JS ether 中可能存在一个变量 someVar1
,如果存在,我想像这样将它附加到我的范围:
$scope.someVar2 = someVar1 || 0;
但偶尔,当someVar1
在以太中不存在时,我会收到此错误:
错误:未定义 someVar1
它直接指向JS文件中someVar1
的行和列。
为什么会这样?我的印象是someVar1 || 0
会检查someVar1
是否未定义,这是假的,并将$scope.someVar2
设置为0。
【问题讨论】:
不幸的是,我不能。主要是因为 someVar1 在另一个文件中,我相信有时该文件甚至没有加载,这就是它未定义的原因。问题主要是,为什么短路没有捕捉到未定义? @palaѕн 我能够模拟这个并添加了 gpouilloux 的修复。 jsfiddle.net/ScubaShneve/o6cL4asg 好的,如果您想查看它,我还将一个问题链接为重复。 非常接近,特别是因为这个问题的答案是您链接的问题的答案之一。我看到的不同之处在于,我在问更多为什么短路没有捕捉到它,因为 undefined 是假的。我的问题的答案解释说,引用变量会引发错误,而不是在短路中检查未定义。 【参考方案1】:要使someVar1
成为潜在的undefined
,必须首先声明此变量。
在您的情况下,负责定义 someVar1
的代码可能在此脚本之后被调用(或者可能永远不会)。
我建议首先检查一下。
作为 hack,您可以使用 typeof
检查变量是否是自己定义的。
typeof
不会抛出 ReferenceError
是变量未定义,而是会回复 undefined
如果变量未定义或有 undefined
值。
例如,您的代码可能如下所示:
$scope.someVar2 = typeof(someVar1) !== "undefined" ? someVar1 : 0;
参考:https://developer.mozilla.org/fr/docs/Web/javascript/Reference/Erreurs/Not_defined
【讨论】:
您可以在答案中的某处添加 typeof(someVar1) === "undefined" 我会接受吗? 是的,我刚刚更新了我的答案以上是关于JavaScript短路仍然引发未定义的错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在 JavaScript [重复] 中引用未定义变量时如何避免错误
未捕获的 ReferenceError:$ 未定义(PHP 中的 JavaScript/HTML)[重复]