使用Javascript时,有时会在变量前面加上两个感叹号,这样做表示什么含义呢?Javascript中,!表示运算符“非",如果变量不是布尔类型,会将变量自动转化为布尔类型,再取非,那么用两个!!就可以将变量转化为对应布尔值

Javascript中哪些情况下!!值为真?

Javascript中哪些情况下!!值为真?当变量转化为布尔值true时为真咯!

Javascript中各种类型如何转换为布尔值?

我们至少可以想到undifined和null一定是转化为false的,数字0也一定是false,那么,空字符串,空数组,空对象呢?别急,下面的实验会有清晰的答案。

首先,定义三个转化布尔值的函数,我们后面会看到这三个函数是等价的,并且同时输出三个函数的转化结果

function trueOrFalseIf(toTest){if(toTest){return true;}else{return false;}
}function trueOrFalseDouble(toTest){return !!toTest;
}function trueOrFalseBoolean(toTest){return new Boolean(toTest);
}function print(toTest){document.write(trueOrFalseIf(toTest)+","+trueOrFalseDouble(toTest)+","+trueOrFalseBoolean(toTest)+"<br/>");
}

依次测试undefined,null,空字符串"",负0,正0,不确定数值NaN,布尔值false和布尔值true,字符串"0",数字1,数字无穷大Infinity,字符串"true",字符串"false",空数组[],空对象{},函数

function test(){var toTestArray=[undefined,null,"",-0,0,NaN,false,true,"0",1,Infinity,"true","false",[],{},function(){}];for(var i=0;i<toTestArray.length;i++){print(toTestArray[i]);}}

测试结果如下:

false,false,false

false,false,false

false,false,false

false,false,false

false,false,false

false,false,false

false,false,false

true,true,true

true,true,true

true,true,true

true,true,true

true,true,true

true,true,true

true,true,true

true,true,true

true,true,true

可以看到前面7个值都是false,后面9个值都是true。说明三个函数的作用是一样的。比较值得一提的结论如下:

众望所归,undefined和null为false。

任意数组,对象,函数(函数是特殊的对象)都转化为真,即使是空数组,空对象。

空字符串为false,非空字符串为true。

数值正负0,不确定值为false,其它为true,无穷大也是true。

字符串"0"和数值0可以相互转换,但它们转换为不同的布尔值,即0可转换为"0","0"可转换为true,但0却转换为false,可见Javascript中类型转换不具有传递性。

一个更有趣的现象是布尔值false会转化为字符串"false",而字符串"false"却转换为布尔值true。

document.write(new String(false));
document.write(new Boolean("false"));

结果为

falsetrue

回到我们的题目,Javascript中!!(两个感叹号,双感叹号)可以用来做什么,可以用来判断一些变量的值啊!如果值为真,首先可以排除undefined和null,根据对象类型,可以做出如下判断:

数值:表示不是0,且有确定含义的值(包括无穷大)

字符串:表示长度大于0的字符串

数组,对象,函数:只能表示不是undefined或null,并不能判断是否有元素和内容。

另外,我们上面比较了三个函数,结果是一样的,所以下面两个用法其实是完全等价的:

if(!!value){}if(value){}

如果作为条件表达式,不需要使用!!进行转换,Javascript会自动转换,!!就只应用于将类型转换为布尔值。

欢迎扫描下方二维码关注微信公众号【谈谈IT】,第一时间获取最新文章。

Javascript中!!(两个感叹号,双感叹号)的含义相关推荐

  1. JS/JavaScript中两个等号 == 和 三个等号 === 的区别

    JavaScript中两个等号 == 和 三个等号 === 的区别 一.概念 == 和 ===  (1)  "=="叫做相等运算符,"==="叫做严格运算符. ...

  2. js中!!的用法(双感叹号)

    在javascript代码中经常会见到!!的情况,本文即以实例形式较为深入的分析javascript中2个感叹号的用法.分享给大家供大家参考之用.具体分析如下: javascript中的!!是逻辑&q ...

  3. 如何快速找出找出两个数组中的_找出JavaScript中两个数组之间的差异

    LeetCode今天面临的挑战是在数组中查找所有消失的数字. 蛮力 我们的输入包括一个缺少数字的实际数组.我们想将该数组与相同长度的数组进行比较,其中没有遗漏的数字.所以如果给定的话[4,3,2,7, ...

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

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

  5. VS .net 2003调试javascript中两个杂症的解决

    基本的调试方法及步骤,vs文档里写的再详细不过了.这里是我这两天压制了数百次重装系统的邪念后,在前辈高手无私的奉献,搜索引擎不知疲倦的工作下,得到的一点经验,希望能为大家和自己的记忆带来一些帮助.   ...

  6. JavaScript 中两个 !! 是什么意思?

    两个 !! 号的意思是将 undefind.unll 强制转换为 Boolean 类型. let name = undefined; let age = null; console.log(name, ...

  7. javascript中两个等号和三个等号的区别

    首先,== equality 等同,=== identity 恒等. ==, 两边值类型不同的时候,要先进行类型转换,再比较. ===,不做类型转换,类型不同的一定不等. 下面分别说明: 先说 === ...

  8. Javascript中四舍六入五成双

    * 四舍六入五考虑, * 五后非零就进一, * 五后皆零看奇偶, * 五前为偶应舍去, * 五前为奇要进一. /*** @param number 需要科学计算的数据* @param scale 保留 ...

  9. JavaScript中两种定时器和清除定时器的使用

    ​ 一.定义 定时器就是在一段特定的时间后执行某段程序代码. 二.定时器的使用 1.单次定时器(setTimeout) 以指定的时间间隔(时间单位为毫秒)调用一次函数的定时器. <script& ...

最新文章

  1. 设置commit 提交模板
  2. python新建文件夹口令_3分钟学会一段Python代码脚本,轻松实现破解FTP密码口令...
  3. Java基础知识练习02
  4. VS2010 C++下编译调试MongoDB源码
  5. .Net Core 中的包、元包与框架(Packages, Metapackages and Frameworks)
  6. 统计学习方法第十五章作业:SVD矩阵分解 代码实现 及其在推荐的应用和矩阵压缩意义
  7. Spring 学习笔记(二)Spring AOP
  8. Linux下安装和配置solr/tomcat/IK分词器 详细实例二.
  9. linux/ubuntu查看内核版本命令
  10. leetCode:35. 搜索插入位置
  11. 【转载】三方框架整理
  12. H3C防火墙透明模式部署trunk
  13. html返回的状态值,iradon函数返回的是什么值
  14. HTML5 重复渐变
  15. 雨天的尾巴——LCA+树上差分+动态开点+线段树合并
  16. java导出多个excel,以压缩包下载
  17. 任务二:实现求平方根关键算法(30 分)求 n 以内(不包括 n)同时能被 3 和 7 整除的所有自然数之和的平方根 s,然后将结果s 输出。例如若 n 为 1000 时,则 s=153.909
  18. U盘读不出来的解决办法
  19. unity urp 实现丝绸渲染
  20. 详解优化iOS程序性能的25个方法

热门文章

  1. ROS安装使用与Qt使用ROS配置
  2. 初创公司,你确定你需要人工智能吗?
  3. IOTServiceSetup工具下载安装
  4. 全球销量下滑、紧急换帅 奔驰将奔向何处?
  5. 购物车及商品php代码_php实现商城购物车的思路和源码分析
  6. 基于逻辑回归的癌症分类预测-良/恶性乳腺癌肿瘤预测及ROC曲线绘制
  7. php的filetype,PHP filetype( )用法及代码示例
  8. 高级信息系统项目管理师备考(0)
  9. Flowable发送工作提醒
  10. YOLOv5中wandb下载及使用