情景1:比较数字和字符串
比较数字和字符串时,都要将字符串转换为数据,再两个数字进行比较
比如无法转换为数字,是字符串转换为NaN
99 == "what"
99 == NaN
false
因为用== 试图将 what 字符串转换为数字,结果是NaN,NaN和任何东西都不相等,最终结果为false
情景2:比较布尔值和其它类型
将布尔值转换为数字,再进行比较
true 转换为1,false转换为0
1 == true
1 == 1
true
** 布尔值和一字符串比较 **
"1" == true
"1" == 1
1 == 1
true
字符串转换为数字,布尔值转换为数字
情景3:比较null和undefinded
这两个值比较的结果都是true
undefinded == null
true
情景4:
对象的比较后面介绍,个别情况
1 == ""
1 == 0
false
""这是数字和一个字符串比较,这个字符串时空的,不是NaN,而是0,虽然字符串和数字比较都是false
总结:
1.如果两个值的类型相同,就直接进行比较
2.如果两个值的类型不同,则尝试将他们转换为相同的类型,再进行比较
所有不同类型都要转换为数字才能进行比较
1.字符串转换为数字时,都是为NaN,空的字符串为0
2.NaN不等于任何类型任何值,包括本身
3.undefinded和null比较结果都是true,表示都是"没有值",这是个特殊的,他们两比较的时候都是true ,没有转换为布尔值或是数字什么的
- undefinded和null or 本身比,为true
- null 和undefindedor 本身比,为true
undefined == 1
false
undefined == 0
false
null == 1
false
null == 0
false
undefined == undefined
true
null == null
true
NaN == undefined
false
NaN == null
false
NaN == 1
false
NaN == 0
false
1 == true
true
0 == false
true
0 == '0'
true
'' == '0'
false // 是因为这是两个字符串比较,他们的类型相等,不需要进行转换为数字了,违背总结第一条
0 == ''
true // ''为0
false == 'false'
false // 'false' 为NaN
false == '0'
true
false == undefined
false
false == null
false
'\t' == 0
true //'\t' 为''
'\n' == 0
true // '\n' 为''
'\r' == 0
true // '\r' 为''
网友评论