请选择 进入手机版 | 继续访问电脑版

巅峰霸主

 找回密码
 立即注册

QQ登录

只需一步,快速开始

javascript中的感叹号 "!"理解JS中的!

  [复制链接] [添加相关主题]
烈火大地 发表于 2019-9-8 01:16:09 | 显示全部楼层 |阅读模式
阿里云服务器2折起!

游客只能显示部分内容,请登录后查看帖子完整内容!!!注册完全免费。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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

这是一个布尔操作符,用于将操作的值强制转换为布尔值并取反。常用场景如下:
  1. //条件判断中使用
  2. var a;
  3. var b=null;

  4. if(!a){
  5.   console.log("a是假的");  
  6. }

  7. if(!b){
  8.   console.log("b是假的");  
  9. }

  10. //操作布尔值
  11. var c = false;
  12. var d = !c;//d === true;

  13. //IIFE(自执行函数、立即执行函数:Immediately-Invoked Function Expression)
  14. !function(){
  15.     console.log("IIFE");
  16. }();

  17. //转换值类型
  18. var e=100;
  19. var f='pelli';
  20. var g='';
  21. var h=0;
  22. console.log(!!e);//true;
  23. console.log(!!f);//true;
  24. console.log(!!g);//false;
  25. console.log(!!h);//false;
复制代码


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

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

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

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

  !true===false;

  !"hello"===false;

  !0===true;

  !""===true;

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

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

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

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

  1. var a='abcd';
  2. a=!(!a);//true

  3. !!a===!(!a);
复制代码


3.自执行函数中使用
  1. !!function(){
  2.     //function codes here
  3. }();
复制代码


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

  1. +function(){
  2.     //code
  3. }();

  4. -function(){
  5.    //code        
  6. }();

  7. ~function(){
  8.   //code        
  9. }();

  10. (function(){
  11.     //code
  12. })();

  13. (function(){
  14.   //code
  15. }());
复制代码


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



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

1.取反

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


上一篇:Javascript解析URL方法详解获取当前页面URL等
下一篇:js调用刷新界面的几种方式
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|巅峰霸主 ( 京ICP备12023415号-2 )

声明:本站的任何信息和内容仅代表作者的立场和观点,与巅峰霸主网无关。

禁止在巅峰霸主网发布任何与《中华人民共和国法律》相抵触的言论!

GMT+8, 2019-10-16 17:50 , Processed in 0.081826 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表