SOURCE

//这几个都返回false
//NaN;
// "";
// undefined;
//null;
//0; 
if (NaN) {
  console.log(true);
} else {
  console.log(false);
}
//false
console.log("==========================");
//我们也可以把 && 称为 “取假运算符” ,把 || 称为 “取真运算符”
//对于 && :该运算符返回条件语句中的第一个假值,如果所有的值都为真,则返回最后一个值,&& 也被称为 “守护运算符”比如下面一段代码:
var a = "hello" && "world";
console.log(a); //world
var b = 0 && 1;
console.log(b); //0
console.log("==========================");
//对于 ||:该运算符与 && 运算符相反,它返回条件语句中的第一个真值,如果所有值都为假,则返回最后一个值。比如下面一段代码:
var a = "hello" || 0;
console.log(a); //hello
var b = 0 || NaN;
console.log(b); //NaN
console.log("==========================");
//第一个值是 "hello" ,因为该值是一个非布尔值,JS 引擎会先将它隐式转换成布尔值,而该值不在假值的范围内,所以会被转化成 true 。随后 JS 引擎会继续查找,第二个值是 0 ,该值同样也不是一个布尔值,所以 JS 引擎也会先将它隐式转换成布尔值,而该值在假值的范围内,所以会被转化成 false ,满足 && 运算符的查找条件,则将值 0 返回。而条件判断语句接受到了值 0 ,该值不是一个布尔类型的值,所以会先对它进行隐式转换,而该值在假值范围内,所以会被转化成 false ,然后控制台会输出 false
if ("hello" && 0) {
  console.log(true);
} else {
  console.log(false);
}
console 命令行工具 X clear

                    
>
console