我大约9个月前开始在一家新公司工作,并继续在JS中遇到这个问题。它有效并且我一直在使用它来保持与之前的开发人员编写代码的方式一致,但我并不完全知道它的作用。我已经尝试使用Google搜索,但不确定要搜索的内容。
!options && (options = {})
对我而言,感觉它有点像三元条件,但我不太确定。
更好的例子是:
function init(options) {
!options && (options = {});
}
init();
答案 0 :(得分:4)
代码相当于:
if(!options)
options = {};
这是运算符短路的示例:第二个表达式(options = {}
)仅在第一个表达式(!options
)为真时才会被计算,因为如果第一个表达式为假,则整个&&
- 语句将自动为假。
当使用“and”(&&
)和“或”(||
)运算符时,会发生这种情况。
MDN this page更详细地描述了这一点。
答案 1 :(得分:3)
这是一种将options
初始化为{}
的方式,如果没有给出值。
第一项检查!options
表示“选项为falsy”。
因此,如果options
为null
,undefined
等,它将继续通过&&
语句并设置options = {}
,并对其进行初始化。
它可以写成这样,更清楚:
if (!options) {
options = {};
}