关于if(xx)和 a==b的判断

1、if的判断

JS的if语句会先对括号内的表达式求值,然后将表达式的结果转换为boolean类型再做判断。

  • 对于括号里的表达式,会被强制转换为布尔类型
if(xxx){
}
原理
类型 结果
Undefined false
Null false
Boolean 直接判断
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true
结果
  • 1,3,4,5为 true
  • 2 为 false
举例
// 题目1:
/* 字符串 */
if ("hello") {
  console.log("true");
} // true

if ("") {
  console.log("true");
} // true

if (" ") {
  console.log("true");
} // true

if ("0.00") {
  console.log("true");
} // true

/* 数值 */
if (0.00) {
  console.log("true");
} // false

/* 对象 */
if ({}) {
  console.log("true");
} // true

if ([]) {
  console.log("true");
} // true

2、== 的判断

JavaScript中有两种相等运算符,==和===
当两个操作数的类型相同时,==和===没有什么区别,
当两个操作数的类型不同时,===会直接返回false,而==会先转换操作数的类型,再比较它们是否相等。

如果两个值类型相同,则执行严格相等的运算
如果两个值的类型不同
如果一个是null,一个是undefined,那么相等
如果一个是数字,一个是字符串,先将字符串转为数字,然后比较
如果一个值是true/false则将其转为1/0比较
如果一个值是对象,一个是数字或字符串,则尝试使用valueOf和toString转换后比较
其它就不相等了

null==undefined;
NaN==NaN
"1"==true

解密
x y 结果
Null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number toPrimitive(x) == y
Otherwise otherwise false
toNumber
类型 结果
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123
toPrimitive

对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果

举例
"" == 0  //true  空字符转为数值是0
" " == 0  //true
"" == true  //false
"" == false  //true
" " == true  //false

!" " == true  //false
!" " == false  //true
"hello" == true  //false
"hello" == false //false
"0" == true  //false
"0" == false  //true
"00" == false  //true
"0.00" == false  //true

undefined == null  //true
{} == true  // false
[] == true  //false
var obj = { 
  a: 0, 
  valueOf: function(){return 1} 
} 
obj == "[object Object]"  //false  对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结
果
obj == 1  //true
obj == true  //true
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容