在笔试过程中时常会遇到一些莫名其妙的相等判断(不同类型之间直接比较),但却不知道这些相等判断是否成立。由于JavaScript属于弱类型比较,所以会存在类型的转换,以下就是部分我对JavaScript中数据类型转换比较的笔记:
● undefined派生自null,所以console.log(null == undefined); //true;
● 字符串与boolean类型也可以比较:
console.log(“xxx” == true); //false;
console.log(“” == false);//true;
if(“xxx”){console.log(“true”)};//true;
(空字符串与boolean类型比较时会转换为false,他们之间可以直接比较,但是非空字符串虽能转换为true,但是却不能和true相等比较)。
● Number类型与boolean类型也可以比较,与字符串类型的结果类似:
console.log(3 == true); //false;
console.log(0 == false); //true;
if(3){console.log(“true”)};//true;
● 对象Object可以转换为boolean类型,但是无法与true/false比较,因此:
var obj = {name:”xxx”};console.log(obj == true);//false;
console.log(null == false);//false;
var obj = {name:”xxx”};if(obj){console.log(“true”)}; //true;
if(null){console.log(“true”)}else{console.log(“false”)}; //false;
(在Object中,任何对象都可以转换为true,null可以转换为false,但是均不能与其比较)。
● 对于Undefined,也无法与true/false比较:
console.log(undefined == false);//false;
if(undefined){console.log(“true”)}else{console.log(“false”)};//false;
● 对于数值类型(Number)中存在这样一个特殊的数组NaN(Not a Number),NaN与任何数操作均返回NaN,且NaN不与任何值相等,包括NaN本身,但是NaN可以转换为false,却不能比较:
console.log(NaN == NaN);//false;
console.log(NaN == false);//false;
if(NaN){console.log(“true”)}else{console.log(“false”)};//false;