转自:JavaScript中双叹号(!!)作用

经常看到这样的例子:

var a;
var b=!!a;

a默认是undefined。!a是true,!!a则是false,所以b的值是false,而不再是undefined,也非其它值,主要是为后续判断提供便利。

!!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false;
因为javascript是弱类型的语言(变量没有固定的数据类型)所以有时需要强制转换为相应的类型,类似的如:

  • a=parseInt(“1234″)
  • a=”1234″-0 //转换为数字
  • b=1234+”” //转换为字符串
  • c=someObject.toString() //将对象转换为字符串

其中第1种、第4种为显式转换,2、3为隐式转换

布尔型的转换,javascript约定规则为

  1. false、undefinded、null、0、”” 为 false
  2. true、1、”somestring”、[Object] 为 true

对null与undefined等其他用隐式转换的值,用!操作符时都会产生true的结果,所以用两个感叹号的作用就在于将这些值转换为“等价”的布尔值;
再来看看:

var foo;
alert(!foo);//undifined情况下,一个感叹号返回的是true;
alert(!goo);//null情况下,一个感叹号返回的也是true;
var o={flag:true};
var test=!!o.flag;//等效于var test=o.flag||false;
alert(test);

这段例子,演示了在undifined和null时,用一个感叹号返回的都是true,用两个感叹号返回的就是false,所以两个感叹号的作用就在于,如果明确设置了变量的值(非null/undifined/0/”“等值),结果就会根据变量的实际值来返回,如果没有设置,结果就会返回false。

转载于:https://www.cnblogs.com/knyel/p/7842791.html

JavaScript中双叹号(!!)和单叹号(!)相关推荐

  1. JavaScript 中双引号、单引号和反引号的区别

    关注微信公众号:前端充电宝,获取最新原创文章: 在 JavaScript 中,单引号('')和双引号("") 经常用于创建字符串.通常情况下,使用双引号或单引号没有区别,它们最后都 ...

  2. javascript中双感叹号(!!)作用

    作为一个前端,在开发过程中经常会遇到!!(双感叹号),那么!!究竟有何含义,以下做详细说明,并罗列了js各数据类型使用后(不含symbol)输出结果(小白可以参照): javascript中'!'是& ...

  3. Shell脚本中 双引号(“”)单引号(‘’)反引号(``)的区别

    1.由单引号括起来的字符都作为普通字符出现.特殊字符用单引号括起来以后,也会失去原有意义,而只作为普通字符解释. 2.由双引号括起来的字符,除$(美元符号).\(反斜杠).'(单引号).和" ...

  4. 小白编程笔记——JavaScript中两种把表单内容传递给Controller的方法

    工作的时候看到有两种把页面上内容传递给Controller的方法,其中一种是传递对数据库的搜索条件,并且会根据搜索条件访问数据库,并将更新后的数据写在JqGrid表格里.另一种则是用于为数据库新增数据 ...

  5. ::before中双冒号和:after单冒号有什么区别?

    1.双冒号是在bai当前规范中引入的,用于du区分伪类和伪元素.但是伪类兼zhi容现存样式,浏览dao器需要同时支持旧的伪类,比如:first-line.:first-letter.:before.: ...

  6. javascript中双感叹号是什么意思?

    !!一般用来将后面的表达式转换为布尔型的数据(boolean) 因为javascript是弱类型的语言(变量没有固定的数据类型)所以有时需要强制转换为相应的类型 代码如下: let name = un ...

  7. 【javaScript】JavaScript中一个等号、二个等号、 三个等号 的区别(详细例子)

    一.单等于号 1.单等于号具有赋值作用 我们在定义变量时,会对变量进行赋值,例如a=1,就是把1赋值给a. 这就是在初始化对象的时候进行赋值. 2.单等于号具有引用对象作用 比如我们写了 var a ...

  8. JavaScript使用正则表达式进行邮箱表单验证实例

    *******JavaScript使用正则表达式进行邮箱表单验证实例************ 1.在JavaScript中也可以使用正则表达式对表单输入的数据进行验证格式如下 /正则表达式/.test ...

  9. 通过快递鸟如何接入中通快递电子面单

    一.接入前准备(TO商家业务人员) 1.申请快递鸟用户ID和API key 1.1登录快递鸟官网注册页面http://www.kdniao.com/reg注册快递鸟账号: 1.2登录快递鸟用户管理后台 ...

最新文章

  1. UVa11300 Spreading the Wealth(数学问题)
  2. ajax路由器,注册ajax用户的步骤 _ 路由器设置|192.168.1.1|无线路由器设置|192.168.0.1 - 路饭网...
  3. 8月21日科技联播:支付宝转账遭骗可一键撤回,美团欲9月20日上市,估值不少于$600亿...
  4. Copy: 了解SQL Server锁争用:NOLOCK 和 ROWLOCK 的秘密
  5. 全面深入介绍C++字符串:string类
  6. .NET伪静态使用以及和纯静态的区别
  7. error: statement with no effect [-Werror=unused-value]
  8. 关于Oppenheim不等式的加强
  9. 批量将多个 PDF 文件合并成一个独立的 PDF 文件
  10. react-native android 识别读取NFC卡信息
  11. 【最新Unity3D—Particle System粒子系统】最新Unity2017.2018.2019.2020均适用且超详细
  12. 荒野乱斗1月14日维护服务器,荒野乱斗服务器转移方法介绍_荒野乱斗外服怎么转国服[图文]-游戏窝...
  13. 夏季养生要以“清”为贵
  14. 聊聊职场 - 个人发展
  15. 一篇文章构建你的 NodeJS 知识体系
  16. java 虚拟机字节码指令表
  17. 林锐 de 大学十年
  18. mysql查询多个部门的子部门,数据库(多表查询,子查询)
  19. Android英文名词
  20. [吐槽] 微软的DreamSpark

热门文章

  1. vector与结构体联合使用 在磁盘中生成.txt 文件
  2. 终于完成了“微软”化
  3. Linux16-防火墙与firewalld
  4. 如何在python开发的GUI界面程序中恰当地使用PyExecJS
  5. docker mysql详解_Docker轻松入门(详解)
  6. eclipse运行程序时只有run on server
  7. JS中的null和undefined,undefined为啥用void 0代替?
  8. 【SqlServer】SqlServer中的更新锁(UPDLOCK)
  9. Microsoft Dynamics CRM server 2013 中业务规则,有点像C#的正则表达式
  10. 如何恢复,迁移,添加, 删除 Voting Disks