Javascript “~”运算符在此脚本中执行什么操作?

Javascript “~”运算符在此脚本中执行什么操作?,javascript,operators,Javascript,Operators,嗨,我正在从特定索引中删除一个数组,我附带了以下脚本: var arr = [1,2,3,4]; var index = 2; if (~index) arr.splice(index, 1); 我谷歌~操作符在这个脚本中做什么?我找不到任何答案我猜我做了一次错误的搜索谁能解释一下这个操作员和他叫什么名字来进行正确的搜索 我有一个小小的怀疑,这是一种比较!未定义但不确定 提前谢谢 “~”运算符在此脚本中执行什么操作 正如其他人所指出的那样,这是最重要的。这一切都很好,但问题是它在这个脚本中做了

嗨,我正在从特定索引中删除一个数组,我附带了以下脚本:

var arr = [1,2,3,4];
var index = 2;
if (~index) arr.splice(index, 1);
我谷歌~操作符在这个脚本中做什么?我找不到任何答案我猜我做了一次错误的搜索谁能解释一下这个操作员和他叫什么名字来进行正确的搜索

我有一个小小的怀疑,这是一种比较!未定义但不确定

提前谢谢

“~”运算符在此脚本中执行什么操作

正如其他人所指出的那样,这是最重要的。这一切都很好,但问题是它在这个脚本中做了什么:-

这个想法可能和你说的差不多:如果索引是一个数字,就进行拼接。~运算符对其操作数所做的第一件事是,如果可以,将其转换为数字。如果不能,结果不是一个数字,这是错误的,因此条件将是错误的,拼接将不会发生

但这种转换并不像我怀疑代码作者所想的那样频繁地导致NaN-

一些无法拼接的随机示例:

可能不太理想,因为它试图用其中的一些进行拼接。例如,true将使其使用索引1进行拼接,false将使用索引0

“~”运算符在此脚本中执行什么操作

正如其他人所指出的那样,这是最重要的。这一切都很好,但问题是它在这个脚本中做了什么:-

这个想法可能和你说的差不多:如果索引是一个数字,就进行拼接。~运算符对其操作数所做的第一件事是,如果可以,将其转换为数字。如果不能,结果不是一个数字,这是错误的,因此条件将是错误的,拼接将不会发生

但这种转换并不像我怀疑代码作者所想的那样频繁地导致NaN-

一些无法拼接的随机示例:


可能不太理想,因为它试图用其中的一些进行拼接。例如,true将使用索引1进行拼接,false将使用索引0。

请参阅。如果你不知道实际的操作员的名字,这比用谷歌搜索要容易得多。总是有,它又叫什么来着……哦,对了!——如果你打开规范并在其中搜索~,那么第一件事就会出现。并不是说试图在搜索引擎中搜索它不是一个好的尝试,我只是带着一点善意的幽默链接到规范…@scrapedcola关于重复的问题,而这些问题有相似之处,问题中没有提及javascript。由于这个按位运算符现在我知道如何从javascript调用它了,所以我想它不会重复。@Bergi yeap duplicate谢谢,但当我搜索它时,我找不到google或stackoverflow…@nahum:虽然问题标题可能会让人困惑,但它们经常会让人困惑,解释得很好。请参阅。如果你不知道实际的操作员的名字,这比用谷歌搜索要容易得多。总是有,它又叫什么来着……哦,对了!——如果你打开规范并在其中搜索~,那么第一件事就会出现。并不是说试图在搜索引擎中搜索它不是一个好的尝试,我只是带着一点善意的幽默链接到规范…@scrapedcola关于重复的问题,而这些问题有相似之处,问题中没有提及javascript。由于这个位运算符现在我知道如何从javascript调用它了,所以我想它不会重复。@Bergi yeap duplicate谢谢,但我在搜索它时找不到google或stackoverflow…@nahum:虽然问题标题可能会让人困惑,但它们经常会让人困惑,解释得很好。~undefined,~null,~NaN,而且{}所有的产品都在Chrome 28控制台中生产-1。谢谢你一直在帮助社区…@NoahFreitas:我在想什么?这里我测试了几个,但它们不是NaN。叹气~未定义、~null、~NaN和{}都在Chrome 28控制台中生成-1。谢谢你一直在帮助社区…@NoahFreitas:我在想什么?这里我测试了几个,但它们不是NaN。叹气 ~-1 === 0 ~"foo" === -1 ~0 === -1 ~1 === -2 ~2 === -3 ~true === -2 ~false === -1 ~-2 === 1 ~undefined === -1 ~null === -1 ~NaN === -1