这是什么意思?:x || x === {}

6

以下是需要完成的内容:

x || x === {}

不是指 !!x,而是指x是否被定义了吗?

这可能会有所帮助....https://dev59.com/gHA65IYBdhLWcg3w7DP8 - BobSki
1
由于 {} 是真值,我不看到上面的代码有什么意义... - Niet the Dark Absol
因为比较的缘故,这不是一个重复内容。 - Nina Scholz
1
@Baz:他们是谁?你真正看到了什么?或者你只是想问其他问题? - user1106925
6
我很好奇这段话的原文所在背景。它看起来更像是一个非 JS 程序员猜测语言工作方式的结果,或者是某些代码被误解了,比如 x = x || {},这种写法非常常见。 - user1106925
显示剩余5条评论
3个回答

7

那种比较没有意义,因为如果x是真值,你会得到x的结果;或者x是假值,你会得到false(一个假值永远不会严格等于一个空对象实例)。

简洁版本如下:

x || false

为了让我得到xfalse,请原谅我。


你会在右侧得到false,因为x作为引用与{}进行比较。@Tomasz Lewowski在下面也指定了这一点。 - Razvan Dumitru
2
@RazvanDumitru 这就是她写 false 的原因。 - Daniel Krom
2
当然,但对于初学者来说,直接跳到最终结果有些模糊不清。 - Razvan Dumitru
2
你说得没错,但我想概括一下你最后的陈述:没有什么可以严格等于空对象字面量。 - Patrick Roberts

5

x || x === {}的意思基本上是x || false

!!x的意思是“x是否为真值”,因此它们并不完全相同-如果x是真值,x || x === {}将返回x。 在相同的情况下,!!x将返回true

||运算符的意思是“如果左侧为真值(不是null、不是undefined、不是0等-详见JavaScript中所有假值),则返回左侧,否则返回右侧”。

在右侧,你有x === {},它总是被计算为false,因为严格比较意味着按引用方式比较(即,“x{}是相同的对象吗?”,这永远不可能成立)

只有当x === truex === false时,!!xx || x === {}才会相同。


2

||会在左侧为真值时返回左侧的值。因此,如果x是一个真值,它将返回x

否则,它会将x与一个新对象进行比较,该对象始终为false,并返回该对象。

因此,如果x为真,则得到(未修改的)x,否则得到显式布尔值false

这与!!x不同,因为如果x是真值,则后者将返回布尔值true


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接