<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<script>
var a; //undefine
var b = a * 0; //NaN
if (b == b) {
console.log(b * 2 + "2"- 0 + 4);
} else {
console.log(!b * 2 + "2"- 0 + 4);//!Nan=true=1*2+'2'-0+4
}
/*
* 1 var a; 此时a只定义未赋值 为a=undefine
* 2 var b = a * 0; b=undefine*0=NaN;
* 3 NaN的特殊,自己本身都不等于自己;所以执行else语句
* 4 !b*2 发生了隐式转换 NaN为数字类型 !b 则b发生隐式转换 b(NaN)->b(flase)
* !false=true->1 1*2=2
* 5 2+'2' 字符串的拼接 2+'2'=22
* 6 22-0+4=26;
*/
</script>
</body>
</html>
var a =1;
var a;//undefine
var b = a * 0;//找不到往上找
if (b == b) {
console.log(b * 2 + "2"- 0 + 4);
} else {
console.log(!b * 2 + "2"- 0 + 4);
}
/*
* 1 var a=1; 此时a=1
* 2 var a; 此时a第二次声明,重复声明无效 a=1;
* 3 b=a*0; b=1*0=0;
* 4 由于0=0 所以执行if (b == b)语句
* 4 b*2 0*2=0
* 5 b*2+'2' 字符串的拼接 0+'2'='02'
* 6 b * 2 + "2"- 0 '02'+4 '02'发生了隐式转换 2+4=6;
*/