一、if(a)语句中的a是真是假
var bool = new Boolean(false); if (bool) { console.log(‘true‘); } else { console.log(‘false‘); }
运行结果为true,因为bool是一个对象,空对象。
var a = [0]; if ([0]) { console.log(a == true); } else { console.log("camille"); }
运行结果为false,因为[0]是一个引用类型,不是假值,于是进入if语句;又因为比较[0]和true前,会做隐式转换,[0]转换为数字是0,true转换为数字是1,那么0==1,结果为false是情理之中的事。
//综上 假值:0,+0,-0,NaN,"",false,undefined,null 非假值:Infinity,‘0‘,‘false‘," ",[],{},function(){}
二、if (a && b)的含义
&&是种短路语法,求值后不一定是个Boolean类型,更不是两边转化布尔值再运算,而是a && b进行表达式求值后,然后再转换为Boolean类型。
比如 2&&3 的结果是3,不是true。
所以if(a && b),我们平常理解的那种,"如果a和b同时为真,就如何如何",是一种错误的描述方式。逻辑或 || 也是如此,先进行表达式求值,再转换为Boolean类型。
时间: 2024-10-02 06:26:51