我正在尝试阅读此代码:
var cloneKeys = Object.keys(base).filter(function ( k ) {
return !~noCloneKeys.indexOf(k);
});
!~
在这做什么?我以前从未见过它,而且很难搜索。从expressions and operators reference开始,它看起来像是逻辑运算符和按位运算符的组合,但这对我来说没有任何意义。
答案 0 :(得分:2)
这是noCloneKeys.indexOf(k) == -1
的一种(非常难以理解的)简短形式。
~value = binary inverse, ~(-1) => 0
!value = boolean inverse, !(0) => true
为了让您的开发人员精神健全,请写下== -1
或< 0
...
详细说明:
-1 == binary 11111111111111111111111111111111 (assuming 32 bit integer)
~(-1) == 00000000000000000000000000000000
!(~(-1)) == !(0) == true
答案 1 :(得分:1)
这是两个不是!
和波浪~
的运营商的组合。
Tilde(按位不) - ~
:
此运算符执行-(input + 1)
(它实际上是在翻转位,但我认为这是一个很好的初学者思考方式)。因此,对于indexOf()
,如果找不到输入则会返回-1
,代字号会将-1
转换为0
。对于找到输入的所有情况,代字号会将0
或更高的值转换为-1
,-2
,-3
,-4
等。
不 - !
:
这是一个反转输入的布尔运算符。或者在您的情况下,将任何0
反转为true,将任何非零反转为false
。
因此,如果我们将它们组合在一起,我们会说0
为indexOf
无法找到输入的实例提供true
,并将其反转为false
。对于所有其他有效输入,请返回...
DEBUG [f85d7a84] Command: cd /home/deploy/my_app/releases/20151210184710 && ( export RVM_BIN_PATH="~/.rvm/bin" aws_access_key_id="<MY_AWS_ACCESS_KEY_ID>" aws_secret_access_key="<MY_AWS_SECRET_ACCESS_KEY>" RAILS_ENV="production" ; ~/.rvm/bin/rvm default do bundle exec rake assets:precompile )
DEBUG [f85d7a84] RVM used your Gemfile for selecting Ruby, it is all fine - Heroku does that too,
DEBUG [f85d7a84]
DEBUG [f85d7a84] you can ignore these warnings with 'rvm rvmrc warning ignore /home/deploy/my_app/releases/20151210184710/Gemfile'.
DEBUG [f85d7a84]
DEBUG [f85d7a84] To ignore the warning for all files run 'rvm rvmrc warning ignore allGemfiles'.
DEBUG [f85d7a84]
DEBUG [f85d7a84]
DEBUG [f85d7a84]
DEBUG [f85d7a84] rake aborted!
DEBUG [f85d7a84]
DEBUG [f85d7a84] ArgumentError: Missing required arguments: aws_access_key_id, aws_secret_access_key
...
。