'!!!是什么? javascript中的语法含义?

问题描述 投票:2回答:3

我刚刚在一个Windows Store Apps示例中遇到了以下代码。

if (that.assets[asset].object === null || !!!that.assets[asset].object.canPlayType) {

它使用三重感叹号语法。我已经进行了一些测试(我很确定我错过了一些东西),并且单个!的结果始终相同。我认为它有点等效于===!== ...

任何人都可以解释!!!语法的含义吗?

javascript operators
3个回答
5
投票

我认为它在某种程度上等同于===和!== ...

不,它只是三个“ not”运算符,一个“ not-not-not”。

!(!(!(x)))相同,并且始终等效于单个!x

实际上没有任何用处。 !!是将任何变量转换为其布尔表示形式的一种隐秘方式,但是!!!只是愚蠢的。您可以将任意数量的!链接在一起,但是对任何事情都没有用。


0
投票

!!!是三次否定,因此与!:

相同
!true -> false

!!true -> true

!!!true -> false

-1
投票

这可以完美地回答您的问题https://stackoverflow.com/a/264037/1561922

!!! x可能正在反转布尔转换!! x:

var myBool = Boolean("false");  // == true

var myBool = !!"false";  // == true

“任何不为空的字符串都将为true”

所以!!!"false"; // == false

这个问题不是在开玩笑。 Node.js (downloaded 5 days ago) uses this in Assert.js例如:

function ok(value, message) {
  if (!!!value) fail(value, true, message, '==', assert.ok);
}
assert.ok = ok;

编辑:我认为他们出于出于可读性原因的原因而这样做,因为!value already suffices

编辑:Node changed it.我不知道为什么五天前下载的Node.js版本仍然使用!!! value而不是GitHub中的!value。

编辑:Jonathan explains why here。 Nodejs.org的稳定版本v0.10.xx仍然具有!!! value,而不稳定版本v0.11.xx具有!value修正。

© www.soinside.com 2019 - 2024. All rights reserved.