Javascript 这些逻辑运算符是如何工作的?

Javascript 这些逻辑运算符是如何工作的?,javascript,Javascript,我试图了解这条线是如何工作的: var dependencies = mod && mod.dependencies || []; 这行代码存在于一个函数中,该函数以mod为参数,mod为对象。我的理解是,首先它(顺便说一句,为了精确起见,这里的“it”是什么?它是引擎吗?)将检查mod和mod.dependentials是否都解析为true,如果是,则| |运算符将短路,mod.dependentials将返回。如果其中一个为false,则返回空数组 不过,我不明白为什么它同

我试图了解这条线是如何工作的:

var dependencies = mod && mod.dependencies || [];
这行代码存在于一个函数中,该函数以mod为参数,mod为对象。我的理解是,首先它(顺便说一句,为了精确起见,这里的“it”是什么?它是引擎吗?)将检查mod和mod.dependentials是否都解析为true,如果是,则| |运算符将短路,mod.dependentials将返回。如果其中一个为false,则返回空数组


不过,我不明白为什么它同时查找mod和mod.dependence。没有mod.dependencies可以存在吗?为什么不寻找mod.dependencies呢?

这是Javascript中的一种常见技术。如果
mod
mod.dependencies
为空或未定义,它本质上会创建一个“回退”。
mod&&mod.dependencies
的原因是,如果
mod
为空,则直接寻址
mod.dependencies
将抛出错误。因此,它会检查以确保
mod
不为空
&&&
mod.dependencies
不为空

||[]
部分意味着如果
mod
mod.dependencies
为空或未定义,则将
dependencies
分配给空数组

你可以这样想:

如果定义了mod并且定义了mod.dependencies,则使用mod.dependencies。否则,请使用空数组([])


如果
mod
不存在,则
mod.dependencies
是引用错误。@NiettheDarkAbsol如果
mod
不存在,则根本不检查
mod.dependencies
。@NiettheDarkAbsol在
mod
为参数的函数中,它确实“存在”,但是它可能是
null
@Michael,这也是一件好事。这就是为什么代码是这样写的,特别是为了避免那个特定的错误。
mod
如果参数没有传递给函数,也可能是未定义的