我正在删除特定索引中的数组,我附带了这个脚本:
var arr = [1,2,3,4];
var index = 2;
if (~index) arr.splice(index, 1);
我谷歌"what does "~" operator do in this script?"
我无法找到任何答案我想我正在做错误的搜索任何人都可以解释我这个操作符以及他为正确搜索命名的是什么?
我有点怀疑与(!)(未定义)比较,但不确定......
提前致谢
答案 0 :(得分:4)
“〜”操作符在此脚本中做了什么?
正如其他人所指出的,它是bitwise NOT operator。这一切都很好,但在这个脚本中做的是问题。 : - )
这个想法可能做了几乎所说的话:如果index
是一个数字,请执行splice
。 ~
运算符对其操作数执行的第一件事是将其转换为数字(如果可以)。如果不能,结果为NaN
(“不是数字”),这是假的,因此条件将为假,splice
不会发生。
但转换不会导致NaN
几乎,因为我怀疑该代码的作者会想到。 : - )
一些无法执行splice
的事情的随机示例:
~-1 === 0
有些将执行splice
:
~"foo" === -1 ~0 === -1 ~1 === -2 ~2 === -3 ~true === -2 ~false === -1 ~-2 === 1 ~undefined === -1 ~null === -1 ~NaN === -1
可能不太理想,它试图与其中一些splice
。例如,true
将使用索引1
进行拼接,false
将为索引0
。