我在关于coffeescript的小书中找到了这个
!!~ string.indexOf "test"
我测试
~-1 == 0
~0 == -1
~3 == -4
~-2 == 1
那么这里到底发生了什么以及为什么~
在0
上返回-1
,-1
是唯一产生0
的值?
答案 0 :(得分:3)
在two's complement integers中,-1是所有1位的序列。 ~
bitwise operator:
反转其操作数的位。
以1位的顺序反转位给出一个0位的序列,0位的序列是整数0.因此~i
当且仅当i === -1
为零时为零
如果找不到值,[...]返回-1
将这两件事放在一起告诉我们:
~ string.indexOf "test"
当且仅当"test"
中不存在string
时,为零。然后我们将!!
"强制转换为布尔值"诀窍和事实0
是唯一在JavaScript中是假的,我们有:
!!~ string.indexOf "test"
如果true
出现"test"
而string
出现false
则为string.indexOf("test") != -1
;或者,在合理和可读的代码中,它们与:相同
{{1}}
如果这本书实际上是在建议你编写那样的代码那么你应该烧掉那本书并找到一本更好的书。使用所有那些小小的东西只是那种"聪明"这会让每个维护代码的人都讨厌你。