!!obj与JavaScript中!!的作用

首先要知道JavaScript的变量类型在一些操作符下会隐式转换的。比如 " ! " 运算符

alert(!true); // 输出false

alert(!100); // 输出false

alert(!'Web前端开发'); // 输出 false

更多详细的隐式类型转换请参考这篇博文: JavaScript隐式类型转换

一个 " ! " 将变量转为一个boolean类型的值,那么两个连续的 " ! "号叠加就会把变量转为它理应代表的布尔值。

以下为"!!"的规则

number类型: 不为0 就,!!num 等于true;

string类型: 不为"" (空字符串),!!str 等于true;

!!null 等于false

!!undefined 等于false

!!{} 等于 true  //注意:对象就算为空都会被转为true

!!function(){} 等于 true   //注意:这样写function 并不会执行function,所以就算function里面写任何东西都会返回true

  可以看到function并没有被执行,并且返回true

举例:

console.log(!!0);         //false
console.log(!!123);       //true   

console.log(!!"some");    //true
console.log(!!"");        //false

console.log(!!undefined)  //false

console.log(!!null)       //false


//

function testInIf(value){
	if(value){
		return true;
	} else {
		return false;
	}
}

//以下全部打印true

console.log(!!{});
console.log(!!{k: 'v'});
console.log(testInIf({}))
console.log(testInIf({k: 'v'}))


console.log(!![]);
console.log(!![0,1]);
console.log(testInIf([]))
console.log(testInIf([0,1]))


console.log(!!function(){});
console.log(testInIf(!!function(){}))


console.log(!!function(){
	console.log("被执行");
	return false;
});
//这个函数并没有被执行
//请注意, 双"!"号和单"!"号都不会执行函数,只是将函数转为了函数表达式,想要执行还需要在后面加 ()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值