我正在阅读这个javascript函数:
if (~['bacon', 'burger'].indexOf(type)) {
this.res.writeHead(200, { 'Content-Type': 'text/plain' });
this.res.end('Serving ' + type + ' sandwich!\n');
}
但是我不确定当我使用它时有什么意思~
知道什么意思?
答案 0 :(得分:9)
~
是按位NOT运算符。它会切换一个数字的每一位。
0
变为-1
。-1
变为0
。这意味着
if (~['bacon', 'burger'].indexOf(type)) {
是一种令人困惑的写作方式
if (['bacon', 'burger'].indexOf(type) == -1) {
indexOf
在找不到字符串时返回-1
。
答案 1 :(得分:3)
~ is a Bitwise NOT operator...
答案 2 :(得分:2)
在这种情况下,~
允许该代码将.indexOf()
的返回值 - 一个表示数组中搜索值的位置的数字 - 转换为布尔值。换句话说,它需要"其中值是"结果并将其转换为"是列表中的值"结果
如何?好吧,.indexOf()
在找不到值时返回-1
,如果是,则返回大于或等于零的数字。 ~
运算符将其数字参数转换为32位整数,然后反转每一位。该过程恰好将-1
变为0
,将任何正整数变为某些负非零值,将0
变为-1
。当这些结果随后被检查为布尔值时,原始-1
将为false
(因为0
是" falsy")而大于或等于零的整数将为true
(因为它们全部转换为某些非零值)。
答案 3 :(得分:-1)
按位NOT(~a)反转其操作数的位。
实施例
9(基数10)= 00000000000000000000000000001001(基数2)
--------------------------------
~9(基数10)= 11111111111111111111111111110110(基数2)= -10(基数 10)
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators