以下是需要完成的内容:
x || x === {}
不是指
!!x
,而是指x
是否被定义了吗?那种比较没有意义,因为如果x
是真值,你会得到x
的结果;或者x
是假值,你会得到false
(一个假值永远不会严格等于一个空对象实例)。
简洁版本如下:
x || false
为了让我得到x
或false
,请原谅我。
false
的原因。 - Daniel Kromx || x === {}
的意思基本上是x || false
。
!!x
的意思是“x
是否为真值”,因此它们并不完全相同-如果x
是真值,x || x === {}
将返回x
。
在相同的情况下,!!x
将返回true
。
||
运算符的意思是“如果左侧为真值(不是null
、不是undefined
、不是0
等-详见JavaScript中所有假值),则返回左侧,否则返回右侧”。
在右侧,你有x === {}
,它总是被计算为false
,因为严格比较意味着按引用方式比较(即,“x
与{}
是相同的对象吗?”,这永远不可能成立)
只有当x === true
或x === false
时,!!x
和x || x === {}
才会相同。
||
会在左侧为真值时返回左侧的值。因此,如果x
是一个真值,它将返回x
。
否则,它会将x
与一个新对象进行比较,该对象始终为false
,并返回该对象。
因此,如果x
为真,则得到(未修改的)x
,否则得到显式布尔值false
。
这与!!x
不同,因为如果x
是真值,则后者将返回布尔值true
。
{}
是真值,我不看到上面的代码有什么意义... - Niet the Dark Absolx = x || {}
,这种写法非常常见。 - user1106925