Javascript 是福和我一样!福?
知道Javascript 是福和我一样!福?,javascript,Javascript,知道!!foo给出了foo的布尔值,我看到一些程序员说最好使用!!!foo而不是!foo,因为您首先将其更改为布尔值,然后对该值求反 所以我的问题是, 是!!!foo始终等于!foo?(!!!foo==!foo)我从未见过!!!foo在实际代码中使用,但是是的,它们总是严格相等的 额外的两个感叹号只会对布尔值求反两次,结果总是一样的。如果您是正确的,!!!foo等于!foo,我从未见过JS脚本使用!!!foo之前,我想不出一个好的理由来这么做。如果你用自己的代码编写,你会产生代码气味 换句话说,
!!foo
给出了foo
的布尔值,我看到一些程序员说最好使用!!!foo
而不是!foo
,因为您首先将其更改为布尔值,然后对该值求反
所以我的问题是,
是
!!!foo
始终等于!foo
?(!!!foo==!foo
)我从未见过!!!foo
在实际代码中使用,但是是的,它们总是严格相等的
额外的两个感叹号只会对布尔值求反两次,结果总是一样的。如果您是正确的,
!!!foo
等于!foo
,我从未见过JS脚本使用!!!foo
之前,我想不出一个好的理由来这么做。如果你用自己的代码编写,你会产生代码气味
换句话说,不要这样做。如果foo设置为布尔值,那么!福将等于!!!foo,请参见下面给出的示例和屏幕截图
var foo = true;
console.log('foo => '+foo);
console.log('!foo => '+!foo);
console.log('!!foo => '+!!foo);
console.log('!!!foo => '+!!!foo);
console.log('!!!!foo => '+!!!!foo);
if(!!!foo === !foo){
console.log("Equals");
}else{
console.log("Not Equals");
}
是的。为了清楚起见:
!!x===x
通常不是真的,但是如果x
已经是一个布尔值,“not(not-true)”为真,“not(not-false)”为假,则为真
!foo
始终是一个布尔值;如果foo
为truthy,则为false
,否则为true
因此,如果您替换!foo
in forx
你得到了!!(!foo)==(!foo)
始终为真。删除括号不会改变意思,所以!!!foo===!foo
总是正确的
这意味着没有很好的理由去写
!!!实际代码中的foo
。只要使用!foo
。那太傻了。的单个应用程序
将该值转换为布尔值,并导致该值的逻辑求反。结果总是true
或false
。没有理由应用代码>再增加两次。是的。(还有更多的信,因为评论的长度是最小的)。我知道这很愚蠢,我只是想问一下这个问题,以确保。。。有些人不认为这是同一件事,这是一个特别优柔寡断的布尔值,一个害怕在生活中做出艰难决定的布尔值。虽然这可能是一个有点愚蠢的问题,但逻辑不是实际上是JS中为数不多的事情之一,它允许在第一步之后,语言滥用甚至接近改变结果。有很多方法可以获得,例如a!==如果结果是字符串(或者更好的是对象),你可以做一些奇怪的事情,但是布尔值不是,不可能。foo甚至不需要是布尔值,这适用于所有的foo
。