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

一、JS中关于if(xxx)的判断:

if (xxx) {
}

js是如何处理的?我们先来看几道测试题

//如下代码输出什么?
//题目1
if ("hello") {
    console.log("hello")
}
//题目2
if ("") {
    console.log("empty")
}
//题目3
if ("  ") {
    console.log("blank")
}
//题目4
if ([0]) {
    console.log('array')
}
//题目5
if('0.00'){
  console.log('0.00')
}

以上题目代码的输出结果为:

  • 题目1的输出结果:hello
  • 题目2的输出结果:
  • 题目3的输出结果:blank
  • 题目4的输出结果: array
  • 题目5的输出结果:0.00
    即1,3,4,5条件语句中都为 true,2为 false
类型 结果
Undefined false
Null false
Boolean 直接判断
Number +0, −0, 或者 NaN 为 false, 其他为 true
String 空字符串为 false,其他都为 true
Object true

总结:在if条件语句中,任何一个值,只要它不是 undefined、null、 0、NaN或空字符串(""),那么无论是任何对象,即使是值为假的Boolean对象(P.S 不要将原始布尔值的truefalse与Boolean对象的真或假混淆),在条件语句中都为真。

二、JS中关于a == b 的判断:

console.log("" == 0 ) //  true
console.log(" " == 0 ) //  true
console.log("" == true )  //   false
console.log("" == false ) //  true
console.log(" " == true  )//  false
console.log("" == 0 ) // true
console.log(" " == 0 ) //true
console.log("" == true ) //false
console.log("" == false ) //true
console.log(" " == true ) //false
console.log(" " == false) //true
console.log(!" " == true) //false
console.log(!" " == false) //true
console.log("hello" == true) //false
console.log("hello" == false) //false
console.log("0" == true) //false
console.log("0" == false) //true
console.log("00" == false) //true
console.log("0.00" == false) //true
console.log(undefined == null) //true
console.log([0] == 0) //true
var obj = {
  a: 0, 
  valueOf: function(){return 1} 
} 
console.log(obj == "[object Object]") //false
console.log(obj == 1) //true
console.log(obj == true) //true

从以上结果可总结出:

x y 结果
null undefined true
Number String x == toNumber(y)
Boolean (any) toNumber(x) == y
Object String or Number ttoPrimitive(x) == y
otherwise otherwise false

toNumber

type result
Undefined NaN
Null 0
Boolean ture -> 1, false -> 0
String “abc” -> NaN, “123” -> 123

toPrimitive
对于 Object 类型,先尝试调用 .valueOf 方法获取结果。 如果没定义,再尝试调用 .toString方法获取结果。
总结:当比较运算涉及类型转换时, JavaScript 会按以下规则对字符串,数字,布尔或对象类型的操作数进行操作:
1、当比较数字和字符串时,字符串会转换成数字值。 JavaScript 尝试将数字字面量转换为数字类型的值。 首先, 一个数学上的值会从数字字面量中衍生出来,然后这个值将被转为一个最接近的Number类型的值。
2、如果其中一个操作数为布尔类型,那么布尔操作数如果为true,那么会转换为1,如果为false,会转换为整数0,即0。
3、如果一个对象与数字或字符串相比较,JavaScript会尝试返回对象的默认值。操作符会尝试通过方法valueOf和toString将对象转换为其原始值(一个字符串或数字类型的值)。如果尝试转换失败,会产生一个运行时错误。
P.S、注意:当且仅当与原始值比较时,对象会被转换为原始值。当两个操作数均为对象时,它们作为对象进行比较,仅当它们引用相同对象时返回true

小贴士:对于判断a == b首先先往数字方面靠,字符串中空字符串为false,文字字符串为NaN(NaN和任何值不相等,包括其自身),其余的字符串为true

你可能感兴趣的:(JS中关于if(xx)和 a==b的判断)