javascript中!!(双叹号)的作用

含义
Javascript中,!表示运算符“非",如果变量不是布尔类型,会将变量自动转化为布尔类型,再取非,那么用两个!!就可以将变量转化为对应布尔值。

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

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

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]);

}

}

测试结果:
前面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"却转换为布尔值

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

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

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

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

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

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

if(!!value){

}

if(value){

}

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

原文链接:https://blog.csdn.net/tantanit/article/details/52287700

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值