~ 在 JavaScript 函数中的含义

Meaning of ~ in javascript function

本文关键字:函数 JavaScript      更新时间:2023-09-26

我正在阅读这个javascript函数:

if (~['bacon', 'burger'].indexOf(type)) {
    this.res.writeHead(200, { 'Content-Type': 'text/plain' });
    this.res.end('Serving ' + type + ' sandwich!'n');
  }

但我不确定当我使用它时~有人知道什么意思或什么意思?

~

按位的 NOT 运算符。它切换数字的每一位。

  • 0变得-1.
  • -1变得0.
  • 没有其他数字变为零。

这意味着

if (~['bacon', 'burger'].indexOf(type)) {

是一种令人困惑的写作方式

if (['bacon', 'burger'].indexOf(type) == -1) {

indexOf在找不到字符串时返回-1

~ is a Bitwise NOT operator...

阅读更多

在这种情况下,~允许该代码将返回值 .indexOf()(一个数字,指示搜索值在数组中的位置(转换为布尔值。换句话说,它采用"值在哪里"结果并将其转换为"是列表中的值"结果。

如何? 好吧,当找不到值时,.indexOf()返回-1,如果找到值,则返回大于或等于零的数字。~运算符将其数值参数转换为 32 位整数,然后反转每个位。这个过程恰好将-1转换为0,任何正整数变为某个负非零值,0变为-1。 当这些结果随后作为布尔值进行检查时,原始-1将被false(因为0是"falsy"(,而大于或等于零的整数将被true(因为它们都转换为某个非零值(。

按位 NOT (~ a( 反转其操作数的位。

  • 9(以 10 为基数(= 00000000000000000000000000001001(以 2 为基数(

           --------------------------------
    
  • ~9(基数 10(= 11111111111111111111111111110110(基数 2(= -10(基数10(

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators