if(!!function)和if(function)的区别
今天群里有人问到这样一个问题:
1: var fn = function(){}2: if(!!fn){}3: if(fn){}这两种判断方式有什么区别,自己以前还真没有仔细关注个这个问题,!!(第一种)这种方式对fn进行两次运算,第一次显式将对象转为bool,第二次将false转为true。
而if(fn)(第二种)的方式是直接隐式转换为bool,理论上后面一种应该比前面一种速度要快,但不知为何很多人用的都是第一种,如果你知道的话,希望指点一下。
为了测试他们各自的效率,我去http://jsperf.com上做了个测试,执行100W次while循环来判断其差异性:
在chrome14中,第一种方式总是快于第二种 在IE6、7、8、FF5中,第二种总是快于第一种但差别非常小,基本在0.03s – 0.1s之间,所以基本可以忽略不计。