Javascript中!!(两个感叹号,双感叹号)的含义

JavaScript类型转化

我们知道JavaScript是一门弱类型的语言,但是,在使用中有时需要强制转化为相应的类型。
这里提到类型转换不得不提两个概念:显式转换和隐式转化。

显式转化:

const a = parseInt(1111111111111); 
const b = Obj.toString();

隐式转化:

var a = '111'+0;//a的结果为数值型;
var b = 111+'';//b的结果为字符串类型;

如:a默认是undefined,!a是true,!!a则是false,所以b的值是false,而不再是undefined。这样写可以方便后续判断使用。

所以,!!(a)的作用是将a强制转换为布尔型(boolean)。

js 一个两个三个感叹号区别

1、一个感叹号

!可将变量转换成boolean类型,null、undefined和空字符串取反都为false,其余都为true。

!null=true
!undefined=true
!''=true
!100=false
!'abc'=false

2、两个感叹号
!!常常用来做类型判断。

  • undefinednullfalse
  • 任意数组,对象,函数(函数是特殊的对象)都转化为true,即使是空数组,空对象。
  • 空字符串false非空字符串true
  • 数值正负0,不确定值(NaN)为false,其它为true,无穷大也是true

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

Javascript中!!(两个感叹号,双感叹号)可以用来做什么?

可以用来判断一些变量的值!
如果值为真,首先可以排除undefinednull,根据对象类型,可以做出如下判断:

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

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

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

另外,下面两个用法其实是完全等价的:

	let a; // null、undefined、''、0
    if (a !== null && typeof(a) !== "undefined" && 
        a !== undefined && a !== '' && a !== 0){ 
          //a为truthy时才执行,或者说a为真值时才执行
       }
	let a;
	if(!!a){ 
	//a为truthy时才执行,或者说a为真值时才执行
	}

3、三个感叹号

三个感叹号没有什么意义,和一个感叹号的效果是一样的。一般他们认为!!表示将一个变量转为boolean型,再加一个!是对boolean型取反,和!false或者!true一样。

转载:
https://blog.csdn.net/tantanit/article/details/52287700
https://blog.csdn.net/lx_1024/article/details/79807228

    原文作者:jcat_李小黑
    原文地址: https://blog.csdn.net/weixin_43216105/article/details/99865654
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞