JavaScript中为什么需要!!?

1. 布尔值为false的值

在JavaScript中,布尔值为 false的值有如下几个:

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""''(空字符串)

2. !!的作用

将上述值与 false作比较。

console.log(undefined==false); // false
console.log(null==false); // false
console.log(false==false); // true
console.log(0==false); // true
console.log(NaN==false); // false
console.log(""==false); // true
console.log(''==false); // true

发现 undefined==falsenull==falseNaN==false的值均为 false,如果加上 !!,结果如下:

console.log(!!undefined==false); // true
console.log(!!null==false); // true
console.log(!!false==false); // true
console.log(!!0==false); // true
console.log(!!NaN==false); // true
console.log(!!""==false); // true
console.log(!!''==false); // true

事实上,!!的作用是将值的类型强制转化为布尔类型。

3. 回顾条件判断语句

3.1 一个例子

var b = 0;
if(b){
	console.log('true');
} else {
	console.log('false'); // 执行这行代码
}
var b = 0;
if(b&&true){
	console.log('true');
} else {
	console.log('false'); // 执行这行代码
}
var b = 0;
if(!!b&&true){
	console.log('true');
} else {
	console.log('false'); // 执行这行代码
}

因此,if语句的条件表达式会执行隐式类型转换

3.2 另一个例子

function test(value){
	return value && true;
}
console.log(test(0)); // 0
function test(value){
	return !!value && true;
}
console.log(test(0)); // false

可以看到,!!value强制转化为布尔值。

原文地址:https://www.cnblogs.com/gzhjj/p/11384249.html