if的判断
- . 原理 对于括号里的表达式类型,会被强制转换为布尔类型
- 对于类型为
Undefined
,转换为false
- 对于类型为
Null
,转换为false
- 对于类型为
Boolean
,直接判断 - 对于类型为
Number
,+0、-0、0.00
或NAN
为false
,其他为true
- 对于类型为
String
,空字符串为false
,其余为true
- 对于类型为
Object
,转换为true
- 几个例子
if ("hello") { console.log("hello") } 输出hello
if ("") { console.log('empty') } 输出undefined
if (" ") { console.log('blank') } 输出blank
if ([0]) { console.log('array') } 输出array
if('0.00'){ console.log('0.00') } 输出0.00
==的判断
- . 原理
对于==
两侧的x
和y
,判断其是否相等,有如下原理。
- 若
x
类型为null
,y
为undefined
,结果为true
- 若
x
类型为number
,y
类型为string
,均会将y转化为数字,式子转换为x==toNumber(y)
- 若
x
类型为Boolean,y
类型不限,也均会转化为数字,式子转换为toNumber(x) ==y
- 若
x
类型为Object
,y
类型为String
或Number
,会将对象转换为字符串或数字,式子转换为toPrimitive(x) ==y
- 转化为数字的情况
-
Undifined
转化为NaN
-
Null
转化为0
-
Boolean
时true
转化为1,false
转化为0
- 字符串
"abc"
转化为NaN
,"123"
转化为123
,空字符串空白字符串均转化为0
- 对于对象类型,先尝试调用
valueOf
方法获取结果,没有定义的话再尝试调用toString
方法获取结果 - 几个例子
"" == 0 结果为true
" " == 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
obj == 1 结果为true
obj == true 结果为true
网友评论