!!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;
});
//这个函数并没有被执行
//请注意, 双"!"号和单"!"号都不会执行函数,只是将函数转为了函数表达式,想要执行还需要在后面加 ()

猜你喜欢

转载自blog.csdn.net/qq_37746973/article/details/81146857