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、两个感叹号
!!常常用来做类型判断。
undefined
和null
为false。- 任意数组,对象,函数(函数是特殊的对象)都转化为true,即使是空数组,空对象。
空字符串
为false,非空字符串
为true。- 数值
正负0
,不确定值(NaN
)为false,其它为true,无穷大
也是true。
字符串”0″
和数值0
可以相互转换,但它们转换为不同的布尔值,即0可转换为”0″,”0″可转换为true,但0却转换为false,可见Javascript中类型转换不具有传递性。
Javascript中!!(两个感叹号,双感叹号)可以用来做什么?
可以用来判断一些变量的值!
如果值为真,首先可以排除undefined
和null
,根据对象类型,可以做出如下判断:
数值:表示不是0,且有确定含义的值(包括无穷大)
字符串:表示长度大于0的字符串
数组,对象,函数:只能表示不是
undefined
或null
,并不能判断是否有元素和内容。
另外,下面两个用法其实是完全等价的:
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