Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Node.js';Assert.js使用!!!代码中的值?它有什么用途?_Javascript_Node.js - Fatal编程技术网

Javascript 为什么Node.js';Assert.js使用!!!代码中的值?它有什么用途?

Javascript 为什么Node.js';Assert.js使用!!!代码中的值?它有什么用途?,javascript,node.js,Javascript,Node.js,!!!value基本上是指非布尔值(value)是吗 假设value=9>1,那么它的意思是:不正确 function ok(value, message) { if (!!!value) fail(value, true, message, '==', assert.ok); } assert.ok = ok; 我的脑子痛。为什么他们不直接使用!值而不是!!!值?!!将变量转换为布尔值和附加值!倒过来。 如果更容易阅读var invertedBool=,我想您可以这样做!布尔值(“假”)

!!!value
基本上是指
非布尔值(value)
是吗

假设
value=9>1
,那么它的意思是:
不正确

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

我的脑子痛。为什么他们不直接使用
!值
而不是
!!!值

!!将变量转换为布尔值和附加值!倒过来。
如果更容易阅读var invertedBool=,我想您可以这样做!布尔值(“假”)

可能的答案是,要么是他们用它来强调转换,要么是一些程序员在某个时候觉得它很有趣,
之间绝对没有语法上的区别!x
!!!x
(或
!!!!!!!!!!!!!!!!!!!!!!!x
)。在第一个
之后
将变量转换为布尔值,您只需将
not
运算符重复添加到某个对象。重要的是它被否定的次数是偶数次还是奇数次。

这肯定会引起大脑疼痛

通常,您会看到如下内容 变量错误\u布尔=!!(错误)

这样做是为了强制“error_boolean”为true或false

我的猜测是这是一个重构bug,带来了无害的后果。可能有人用
替换了像
notValue
(这里是双重否定)这样的东西!值
。注释这行源代码告诉你什么


或者,这只是一种在生产线上吸引注意力的方式,目前为止,它对我们很有效。

!值
!!!值
两者具有相同的效果

但是,他们故意使用
将潜在的“truthy”或“falsy”变量
转换为布尔值

所以使用
是有意义的
当使用
作为反布尔值时,开发人员可以看到(在本例中)
只能是“truthy”,例如字符串而不是

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

如果在重构过程中有人需要将某个值设置为true并使用
,则可以将其设置为字符串。
告诉他使用
!!值
,如果他希望
为布尔值。

可能是因为“他们”一开始只是布尔值转换(
!!
),后来不得不否定条件,并失去了对中间代码含义的了解。@MichaelBorgwardt相反,项目中有一个关于这一点的问题,已经解决了,.@JonathanLonowski如果。。。为什么我在我的Node.js安装中看到了它,我5天前刚刚下载并安装了它?@geoys不同的分支。它已被解析为0.11,但是。不,使用
,第一个
强制转换为布尔值并将其反转,第二个将其还原为原始真实值。
的单个应用程序
运算符足以将操作数转换为布尔值并对其求反。你不必显式地调用
Boolean()
@FrédéricHamidi你是对的。也许他们只是出于习惯才这样做的。但事实上!就够了。啊,程序员的生活。R.E你的第二段;使用单一的
更有意义,因为它与
具有相同的效果。这完全无法解决为什么的问题!!!价值不同于!价值,事实上不是。问题不是为什么!!!价值不同于!价值问题是他们为什么这样写。@Matt是的,它有同样的效果。但是三重
声明
不一定必须是
真的
@juk:我不确定你的意思。一个
也不要求'value``为true。