将您的值放入数组,然后检查您的项目是否在数组中:
if ([1, 2, 3, 4].includes(test.type)) {
// Do something
}
如果您支持的浏览器没有该Array#includes
方法,则可以使用此polyfill。
~
波浪号快捷方式的简短说明:
更新:由于我们现在有了该includes
方法,因此~
不再需要使用该hack。只是将其保留在此处,以供有兴趣了解它的工作原理和/或在他人的代码中遇到过它的人使用。
除了检查结果是否indexOf
为之外>= 0
,还有一个不错的捷径:
if ( ~[1, 2, 3, 4].indexOf(test.type) ) {
// Do something
}
这是小提琴:http : //jsfiddle.net/HYJvK/
这是如何运作的?如果在数组中找到一个项目,则indexOf
返回其索引。如果找不到该项目,它将返回-1
。无需赘述,~
是按位NOT运算符,该运算符0
仅返回-1
。
我喜欢使用~
快捷方式,因为它比对返回值进行比较简洁。我希望JavaScript具有一个in_array
直接返回布尔值的函数(类似于PHP),但这只是一厢情愿(Update:现在可以了。称为includes
。)。请注意,jQuery inArray
共享了PHP的方法签名时,实际上模仿了本机indexOf
功能(在不同情况下,如果索引才是您真正想要的,该功能将很有用)。
重要说明:使用波浪号快捷方式似乎引起了争议,因为一些人强烈认为代码不够清晰,应不惜一切代价避免使用(请参阅此答案的注释)。如果您有共同的想法,则应该坚持.indexOf(...) >= 0
解决。
稍长一点的解释:
JavaScript中的整数是带符号的,这意味着最左边的位被保留为符号位;一个标志,指示数字是正数还是负数,1
负数表示。
以下是一些32位二进制格式的正数示例:
1 : 00000000000000000000000000000001
2 : 00000000000000000000000000000010
3 : 00000000000000000000000000000011
15: 00000000000000000000000000001111
现在,这些数字相同,但为负数:
-1 : 11111111111111111111111111111111
-2 : 11111111111111111111111111111110
-3 : 11111111111111111111111111111101
-15: 11111111111111111111111111110001
为什么对负数使用这种怪异的组合?简单。负数就是正数+ 1的倒数;将负数加上正数总是应该产生的0
。
为了理解这一点,让我们做一些简单的二进制算术。
这是我们将添加-1
到的方法+1
:
00000000000000000000000000000001 +1
+ 11111111111111111111111111111111 -1
-------------------------------------------
= 00000000000000000000000000000000 0
这是我们将添加-15
到的方式+15
:
00000000000000000000000000001111 +15
+ 11111111111111111111111111110001 -15
--------------------------------------------
= 00000000000000000000000000000000 0
我们如何获得这些结果?通过定期加法,这就是我们在学校所教的方式:您从最右边的列开始,然后将所有行加起来。如果总和大于最大的一位数字(十进制为9
,而二进制为1
),则将剩余的数字带入下一列。
现在,您会注意到,在将负数添加到其正数时,不是all 0
的最右边的列将始终具有两个1
s,将它们加在一起将得到2
。两个be的二进制表示形式10
,我们将携带1
到下一列,然后将0
结果放在第一列。左侧的所有其他列只有一个带有a的行1
,因此1
从上一列开始的结转将再次加到2
,然后将继续结转...此过程会重复进行,直到我们到达最左侧的列为止。在1
被结转无处可去,所以它溢出和丢失,我们就只剩下0
一切都跨越。
该系统称为2的补码。您可以在此处了解更多信息:
2的有符号整数的补码表示形式。
现在,以2的补码结束的崩溃过程已经结束,您将注意到,这-1
是唯一二进制表示为1
的数字。
使用~
按位NOT运算符,可以反转给定数字中的所有位。0
从所有位取反的唯一方法是,如果我们从整体开始1
。
因此,所有这一切都是漫长的说法,~n
只有0
在n
is 时才会返回-1
。
in
?