我正在尝试理解这行代码。对r [e]做什么是减号和代价?:
r = {}
for (e of s)
r[e] = -~r[e] // What is this specific line assigning?
for (e in r)
if (r[e] == 1)
return e
return '_'
此代码解决的问题是(特定行已注释):
给定一个字符串s,找到并返回a的第一个实例 其中没有重复的字符。如果没有这样的角色,请返回 ' _'
我理解除评论之外的其他行。
答案 0 :(得分:5)
Tilde是一个unary operator
,它右边的表达式执行这个小算法
-(N+1) // N is the expression right to the tilde
因此,在您的代码中,它将r[e]
递增1(因为双重否定)。
请参阅以下示例:
console.log(~-2); // 1
console.log(~-1); // 0
console.log(~0); // -1
console.log(~1); // -2
console.log(~2); // -3
答案 1 :(得分:2)
Tilde是NOT操作的按位运算符。
它将一个数字作为操作数,将其转换为32位整数(参考IEEE_754-1985并翻转所有位.0变为1,1。变为0。
例如,如果数字5由
表示00000000 00000000 00000000 00000101
数字〜5是上面的,翻转位
11111111 11111111 11111111 11111010
〜5的十进制值是(-6)。这也被称为2的补充。由于最重要的位(代表JavaScript中数字的符号)被翻转,因此符号将始终改变。 2的补码导致X的值变为 - (X + 1)
某些应用程序(如引擎,使用按位数据结构和按位操作)在这些应用程序中起作用。