Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 是福和我一样!福?_Javascript - Fatal编程技术网

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 for
x
你得到了
!!(!foo)==(!foo)
始终为真。删除括号不会改变意思,所以
!!!foo===!foo
总是正确的


这意味着没有很好的理由去写
!!!实际代码中的foo
。只要使用
!foo

那太傻了。
的单个应用程序
将该值转换为布尔值,并导致该值的逻辑求反。结果总是
true
false
。没有理由应用
再增加两次。是的。(还有更多的信,因为评论的长度是最小的)。我知道这很愚蠢,我只是想问一下这个问题,以确保。。。有些人不认为这是同一件事,这是一个特别优柔寡断的布尔值,一个害怕在生活中做出艰难决定的布尔值。虽然这可能是一个有点愚蠢的问题,但逻辑不是实际上是JS中为数不多的事情之一,它允许在第一步之后,语言滥用甚至接近改变结果。有很多方法可以获得,例如
a!==如果结果是字符串(或者更好的是对象),你可以做一些奇怪的事情,但是布尔值不是,不可能。foo甚至不需要是布尔值,这适用于所有的
foo