Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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_Operators - Fatal编程技术网

Javascript 什么事~我该怎么办?

Javascript 什么事~我该怎么办?,javascript,operators,Javascript,Operators,我正在尝试阅读以下代码: var cloneKeys = Object.keys(base).filter(function ( k ) { return !~noCloneKeys.indexOf(k); }); 什么是~你在这里做什么?我以前从未见过它,而且很难找到它。从表面上看,它看起来像是一个逻辑运算符和一个位运算符的组合,但这对我来说没有任何意义。它是一个(非常不可读的)noCloneKeys的缩写形式。indexOf(k)=-1 ~value = binary in

我正在尝试阅读以下代码:

  var cloneKeys = Object.keys(base).filter(function ( k ) {
    return !~noCloneKeys.indexOf(k);
  });
什么是
~你在这里做什么?我以前从未见过它,而且很难找到它。从表面上看,它看起来像是一个逻辑运算符和一个位运算符的组合,但这对我来说没有任何意义。

它是一个(非常不可读的)noCloneKeys的缩写形式。indexOf(k)=-1

~value = binary inverse, ~(-1) => 0
!value = boolean inverse, !(0) => true
为了让您的开发伙伴保持头脑清醒,请编写
=-1
<0


详细说明:

-1 == binary 11111111111111111111111111111111 (assuming 32 bit integer)
~(-1)   ==   00000000000000000000000000000000
!(~(-1)) == !(0) == true
它是noCloneKeys.indexOf(k)=-1的(非常不可读)缩写形式

~value = binary inverse, ~(-1) => 0
!value = boolean inverse, !(0) => true
为了让您的开发伙伴保持头脑清醒,请编写
=-1
<0


详细说明:

-1 == binary 11111111111111111111111111111111 (assuming 32 bit integer)
~(-1)   ==   00000000000000000000000000000000
!(~(-1)) == !(0) == true

这是两个运算符的组合,而不是
和波浪线
~

波浪号(按位非)-
~

这个操作符执行
-(输入+1)
(它实际上是在翻转位,但我认为这是一个很好的初学者思考方法)。因此,在
indexOf()
的情况下,如果没有找到输入,则返回
-1
,tilde将
-1
转换为
0
。对于找到输入的所有情况,tilde将把
0
或更大的值转换为
-1
-2
-3
-4
,等等

不是——

这是一个布尔运算符,用于反转输入。或者在您的情况下,将任何
0
转换为true,将任何非零转换为
false


因此,如果我们将它们结合起来,我们会说,对于
indexOf
找不到输入的任何实例,给我
0
,并将其反转为
true
。对于所有其他有效输入,返回
false

这是两个运算符的组合,而不是
和波浪线
~

波浪号(按位非)-
~

这个操作符执行
-(输入+1)
(它实际上是在翻转位,但我认为这是一个很好的初学者思考方法)。因此,在
indexOf()
的情况下,如果没有找到输入,则返回
-1
,tilde将
-1
转换为
0
。对于找到输入的所有情况,tilde将把
0
或更大的值转换为
-1
-2
-3
-4
,等等

不是——

这是一个布尔运算符,用于反转输入。或者在您的情况下,将任何
0
转换为true,将任何非零转换为
false


因此,如果我们将它们结合起来,我们会说,对于
indexOf
找不到输入的任何实例,给我
0
,并将其反转为
true
。对于所有其他有效输入,返回
false

我认为它实际上是在检查
k
是否不在
noCloneKeys
集中。
~foo.indexOf(bar)
技巧允许使用
.indexOf()
,就像它返回一个布尔结果一样,所以在它前面加上
使其表示“不在列表中”(或字符串,无论是什么)。是的,谢谢,编辑了我的答案。看到了吗,孩子们?如果您让开发人员阅读
,他们就会发生这种情况~(-1)
太频繁了-他们会精神失常!我认为它实际上是在检查
k
是否不在
noCloneKeys
集合中。
~foo.indexOf(bar)
技巧允许使用
.indexOf()
,就像它返回一个布尔结果一样,所以在它前面加上
使其表示“不在列表中”(或字符串,无论是什么)。是的,谢谢,编辑了我的答案。看到了吗,孩子们?如果您让开发人员阅读
,他们就会发生这种情况~(-1)
太频繁了-他们会精神失常!