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。