• javascript中的感叹号 "!"


    JavaScript中会经常遇到一个操作符:!

    这是一个布尔操作符,用于将操作的值强制转换为布尔值并取反。常用场景如下:

    //条件判断中使用
    var a;
    var b=null;
    
    if(!a){
      console.log("a是假的");  
    }
    
    if(!b){
      console.log("b是假的");  
    }
    
    //操作布尔值
    var c = false;
    var d = !c;//d === true;
    
    //IIFE(自执行函数、立即执行函数:Immediately-Invoked Function Expression)
    !function(){
        console.log("IIFE");
    }();
    
    //转换值类型
    var e=100;
    var f='pelli';
    var g='';
    var h=0;
    console.log(!!e);//true;
    console.log(!!f);//true;
    console.log(!!g);//false;
    console.log(!!h);//false;

    现在来说一说这四种常见的场景中感叹号的作用。"!"

    1.条件判断中使用和操作布尔值【取反】

      JavaScript中,感叹号本来就是取反的意思。比如a===false;则!a===true;

      简单来说,感叹号可以把对的(true)变成错的(false),真的(true)变成假的(false)

      !true===false;

      !"hello"===false;

      !0===true;

      !""===true;

    2.双感叹号用于转换值类型【强制转换为布尔值】

      感叹号在取反之前会先将数据类型转换为布尔类型,所以用感叹号操作后的值,结果一定是布尔值,只有两个,要么true,要么false。

      一个感叹号取反,两个感叹号就是取反后再取反,就和我们说的负负得正差不多是一个意思。

      由于是两个感叹号写在一起,可能会造成懵懂,这样写就会明白。

    var a='abcd';
    a=!(!a);//true
    
    !!a===!(!a);

    3.自执行函数中使用

    !!function(){
        //function codes here
    }();

    自执行函数的写法有很多种,如下也都可以:

    +function(){
        //code
    }();
    
    -function(){
       //code        
    }();
    
    ~function(){
      //code        
    }();
    
    (function(){
        //code
    })();

    (function(){
      //code
    }());

    其实这里的感叹号也好,加号也好,只是用了运算符优先级的这一特性,因为这几个运算符在JavaScript中优先级最高,会将紧紧相邻的js语句计算出结果,在计算的过程中,就会执行定义的匿名函数,就达到了自执行的效果。

    总结:感叹号在js中有两个作用:

    1.取反

    2.将值转换为布尔值:true或false。

  • 相关阅读:
    介绍本近期出的好书《软件调试》
    【转贴】Ogre的官僚主义批判
    Module切换,如何实现loading效果
    cacheAsBitmap = ‘true' 可以降低cpu,提高效率?
    设相对布局,则x,y更改无效 horizontalCenter="0" verticalCenter="120"
    flex 1119错误 找不到属性 static 解决方法,编译选项中选中 不启用rsl
    as3的get,set方法实现
    flex的Release编译会把trace也编译进去,
    Alert按钮的事件侦听
    一天编程发现的css名称问题,不支持下划线
  • 原文地址:https://www.cnblogs.com/pelli/p/5889813.html
Copyright © 2020-2023  润新知