js中兩個!!的理解


在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);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM