什么是'!!!'语法在javascript中意味着什么?

时间:2013-10-23 19:06:13

标签: javascript operators

我刚刚在其中一个Windows应用商店应用中遇到了以下代码行。

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

它使用三重感叹号语法。我做了一些测试(我很确定我错过了一些东西),结果总是一样!。我认为它有点等同于===!== ...

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

3 个答案:

答案 0 :(得分:6)

  

我认为它有点等同于===和!== ...

不,这只是三个“非”运​​营商,“不是不是”。

!(!(!(x)))相同,并且始终相当于一个!x

对此毫无用处。 !!是一种将任何变量转换为其布尔表示的神秘方法,但!!!只是愚蠢。你可以将任意数量的!链接在一起,但它对任何东西都没用。

答案 1 :(得分:1)

!true - >假

!! true - >真

!!! true - >假

答案 2 :(得分:-1)

这完全回答了您的问题https://stackoverflow.com/a/264037/1561922

!!! x可能会反转一个布尔转换!! x:

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

var myBool = !!"false";  // == 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.我不知道为什么我5天前下载的Node.js版本仍然使用!!!值而不是GitHub中的!值。

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