zoukankan      html  css  js  c++  java
  • 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);

  • 相关阅读:
    Oracle学习系列7
    oracle 体系结构
    数据库设计三大范式
    Oracle学习系列6
    Oracle学习系列5
    Unity3D for Android 纹理压缩支持
    Unity项目UI图片压缩格式(UGUI)
    [Unity3D]关于U3D贴图格式压缩
    unity 联机调试(android ios)
    UGUI 文字效果实现(ShadowGradientOutline)
  • 原文地址:https://www.cnblogs.com/lidaying5/p/8467327.html
Copyright © 2011-2022 走看看