+variable、!!variable、~~variable等写法

javascript中有很多灵活的代码写法,比较常见的有+variable、!!variable、~~variable

+variable

最早是在jQuery的源代码中看到的, !( +owner.nodeType ),思来想去,这种写法应该是尝试尽可能的将变量转化成数值,近乎相当于执行了0+variable(variable为字符串时,0+str将执行拼接,+str并不会这样)。下表给出了各种类型的变量执行+variable之后的结果情况。

不同类型变量variable执行+variable之后的结果
+variable结果
+null0
+undefinedNaN
+new Date()variable.getTime()
+true1
+false0
+/\w/iNaN
+"some val"==NaN==
+{ }NaN
+function(){}NaN
+[ ]0
+[undefined]0
+[undefined,undefined]==NaN==
+[0,0]==NaN==
+[ [ ] ]==0==
+[[100]]==100==
+[["string"]]NaN
+[[100,100]]NaN

!!variable

连续两个感叹号,表示2次连续取反,作用跟+variable差不多,将任意类型的变量转化成boolean。下表给出个不同类型的variable进行!和!!运算的结果。

不同类型变量variable执行!variable和!!variable之后的结果
variable!运算!!运算
nulltruefalse
undefinedtruefalse
new Date()falsetrue
/\w/ifalsetrue
"some val"falsetrue
{}falsetrue
function(){}falsetrue
[ ]falsetrue

~~variable

对于Numeric的数执行~~,效果类似于向下取整,准确的说,对于大于0的浮点数variable,执行~~variable等同于Math.floor(variable),而对于小于0的浮点数,执行~~variable则相当于Math.ceil(variable).

不同类型变量variable执行~variable和~~variable之后的结果
variable~运算~~运算
100.1-101100,即Math.floor(100.1)
-100.199-100,即Math.ceil(-100.1)
null-10
undefined-10
new Date()~variable.getTime()~~variable.getTime()
/\w/i-10
"some val"-10
{}-10
function(){}-10
[ ]-10
Show Comments

Get the latest posts delivered right to your inbox.