javascript - -~ 在 JavaScript 中做什么?

标签 javascript operators code-snippets

我正在查看其他人的代码,并试图弄清楚他们在做什么。有问题的片段如下所示:

for(j in a)     
  for(i in a)
    y=a[i]+-~j,b=a[j]

我理解 y=a[i] 部分,但是 +-~j 是做什么的?

最佳答案

这是(有点?)波浪号 (~) 运算符的巧妙使用,但它只会导致混淆。 ~(有效地)将数字加一并翻转符号。

~0 === -1

~1 === -2

~-1 === 0

等等

- 将标志翻转回原来的样子。

所以-~j的最终结果是j + 1

然后将其添加到 a[i] 并分配给 y

Moral of the story: don't ever write code like this.

注意 ~ 运算符有合法的用例,最值得注意的是在 .indexOf() 函数中。如果你想检查是否在数组/字符串中找到了某些东西,而不是说:

if (arr.indexOf("foo") > -1) {...},你可以说

if (~arr.indexOf("foo")){...}。这是因为如果未找到该值,indexOf() 将返回 -1,当通过波浪号运算符传递时,将返回 0,这将强制为 false。所有其他值返回 0 到 n,当通过代字号运算符传递时返回 -(1 到 n+1),强制为 true。

关于javascript - -~ 在 JavaScript 中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46477244/

相关文章:

javascript - 使用表中的按钮切换不起作用

c++ - 关于构造函数和运算符的一些基本问题

php - 如何使用 MySQL 的 sphinx 插件实现 PHP 的全文搜索?

jquery - 如何创建 JQuery UI 对话框来显示 HTML 代码片段?

javascript - JSON 网格中的千个分隔数字

javascript - R networkD3 sankey - 为节点标签添加值

javascript - 如何使用javascript OR运算符?

javascript - 在不调用函数的情况下更改 ng-click 上的范围变量

Emacs:像在 gedit 中一样输入命令

javascript - 在我的图表中画圈,从圈中获取节点