在js中經常有兩個!!出現,經常讓人難以理解
(function () { var a = 10; var b = 20; function add(num1, num2) { var num1 = !!num1 ? num1 : a; var num2 = !!num2 ? num2 : b; return num1 + num2; } window.add = add; })(); var sum=add("10", "20"); console.log(sum);
要理解上面的var num1 = !!num1 ? num1 : a;首先要明白其他變量類型和Boolean類型的相互轉化。
0、-0、null、""、false、undefined 或者 NaN轉化為false,其他為true
如下都是false
var myBoolean=new Boolean(); var myBoolean=new Boolean(0); var myBoolean=new Boolean(null); var myBoolean=new Boolean(""); var myBoolean=new Boolean(false); var myBoolean=new Boolean(NaN);
而下面都是true
var myBoolean=new Boolean(1); var myBoolean=new Boolean(true); var myBoolean=new Boolean("true"); var myBoolean=new Boolean("false"); var myBoolean=new Boolean("Bill Gates");
具體參考http://www.w3school.com.cn/js/js_obj_boolean.asp
根據上面的轉化規律來看var num1 = !!num1 ? num1 : a;,如果num1是undefined,null,那么!num1是true,!!num1是false,以此可以看出這句代碼的意思是如果num1不是undifined和null則取參數的值num1,否則取變量a的值。這里並不能判斷num1是否是數值,所以傳入字符串也是可以計算的,計算結果是兩個字符串相加"1020",如果傳入的都是數值,則會把數值相加,結果是30
還可以參考http://blog.csdn.net/dyllove98/article/details/8590638
(function () { var a = 10; var b = 20;
function add(num1, num2) { var num1 = !!num1 ? num1 : a; var num2 = !!num2 ? num2 : b;
return num1 + num2; }
window.add = add; })();
var sum=add("10", "20"); console.log(sum);