Javascript-有人能给我解释一下它到底是做什么的吗?

Javascript-有人能给我解释一下它到底是做什么的吗?,javascript,conditional,Javascript,Conditional,我大约9个月前开始在一家新公司工作,一直在JS中遇到这个问题。它是有效的,我一直在使用它来与以前的开发人员编写代码的方式保持一致,但我不知道它到底是做什么的。我试过用谷歌搜索,但不确定到底要搜索什么 !选项&(选项={}) 对我来说,这感觉像是一种三元条件,但我不太确定 更好的例子是: function init(options) { !options && (options = {}); } init(); 该代码相当于: if(!options) options

我大约9个月前开始在一家新公司工作,一直在JS中遇到这个问题。它是有效的,我一直在使用它来与以前的开发人员编写代码的方式保持一致,但我不知道它到底是做什么的。我试过用谷歌搜索,但不确定到底要搜索什么

!选项&(选项={})

对我来说,这感觉像是一种三元条件,但我不太确定

更好的例子是:

function init(options) {
  !options && (options = {});
}

init();

该代码相当于:

if(!options)
  options = {};
这是一个运算符短路的示例:只有当第一个表达式(
!options
)为真时,才会计算第二个表达式(
options={}
),因为如果第一个表达式为假,整个
&
-语句将自动为假

这在使用“and”(
&&&
)和“or”(
|
)运算符时特别发生


MDN对此进行了更详细的描述。

这是一种初始化
选项
{}
的方法,如果没有给出值

第一次检查,
!选项
,表示“选项为”

因此,如果
options
null
未定义
等,它将继续通过
&
语句设置
options={}
,初始化它

可以这样写,更加清楚:

if (!options) {
    options = {};
}

如果
options
是真实的(存在),则不会发生任何事情。如果它为false(不存在)
options
被创建为空对象。如果它不存在,它只创建options对象并分配它。它相当于
options=options | |{}很高兴看到一些好人在这个可怜的家伙的问题被否决后把它投了赞成票。该死的精英overflow@DevMoutarde看到一个问题网站拒绝结构良好、研究充分的问题,真是令人难过。OP怎么能找到这个?他们做了尽可能多的家庭作业,问了一个问题,结果被否决了:(太棒了,非常感谢你回答这个家伙!我以为这就像是一个条件语句一样简单,但是
&&
把我彻底甩了:-)