javascript - .indexOf() 之前的 -~ 是什么意思?

标签 javascript shorthand

我正在查看 SocketIO 源代码,它有这样的声明:

if (-~manager.get('blacklist').indexOf(packet.name)) {

这里的-~简写是什么意思?

最佳答案

这似乎是一个技巧:

if(manager.get('blacklist').indexOf(packet.name) !== -1)

正如其他人所提到的,~ 是按位取反,它将翻转二进制数字。例如,00000001 变为 11111110,或者在十六进制中,0x01 变为 0xFE

-1 作为有符号整数 32,这是所有按位运算符返回的值(>>> 除外,它返回无符号整数 32)以十六进制表示为 0xFFFFFFFF~(-1) 翻转位以产生 0x00000000,即 0

减号只是在数值上对数字取反。正如 zzzBov 提到的,在这种情况下它什么都不做。

-~(-1) === 0

~(-1) === 0

代码可以改成:

if(~manager.get('blacklist').indexOf(packet.name))

但是,在我看来,字符并没有那么重要,所以较长的版本(可以说更具可读性)会更好,或者实现 contains 方法会更好,这个版本最好留给执行此优化的 JavaScript 编译器或压缩器。

关于javascript - .indexOf() 之前的 -~ 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16614281/

相关文章:

javascript - 在 JavaScript 函数中调用 JQuery 函数

每个边框具有不同宽度时的 CSS 边框速记

ruby - 其他 Ruby Map 速记符号

css - 用于指定所需边框的终极 CSS 快捷方式

java - 简写正则表达式语法与长版本有何不同?

javascript - 速记 http ://as//for script and link tags? 以前有人看到/使用过这个吗?

javascript - 使用 jQuery 时,何时/为什么要在变量前加上 "$"?

javascript - 西蒙游戏: Two colors in a row won't fade properly

javascript - 使用 jinja2 模板(列表和字典)将 Python 数据结构转换为 js 数据结构

javascript - (图形)树结构中的 jQuery sortables