if(xx)(转成布尔值)
我们都知道,if后面的括号里应该写上一个表示判断的语句,它得到的值不是true就是false。
但是,如果括号里只写一个参数呢?比如if(obj)?
这时就涉及到语句中存在的隐式类型转换了。实际上js会把括号里的东西类型转换成布尔值。
转换的规律比较简单,以下的值会被转换成false:
null
undefined
0、+0、-0
NaN
""(空字符串)
除了上面的值,其他的全部都会转换成true。
关于 == 的判断 (转成number类型)
这个玩意儿真是万恶。。。
看看下面这两道题
var a = false;
var b = undefined;
if (a == b) {
alert('true');
}else{
alert('false');
}
是不是以为会弹出true??再看下面一道:
console.log(null == false)
控制台会输出什么呢??。。。。是false
关于==符号的隐式转换,是有一个趋势,将两边的数据转换成number再比较,我们需要知道转number的规律:
- 用+xxx来转number,+null == 0;+undefined == NaN; +NaN == NaN; 当然false是0,true是1.+""和+" "都是0.
当涉及到null和undefined时要小心,它们并不是百分百地符合规律。null和undefined只等于对方。和别人一律不相等。
犀牛书为我们总结如下:
1.null和undefined,相等;
2.数字和字符串,转化成数字再比较;
3.如果有true或false,转换成1或0,再比较;
4.如果有引用类型,优先调用valueOf。
5.其余都不相等。
如果在比较时使用 === 就没有这些问题了。(纳闷(-。-;)为什么要发明 == 这个玩意儿)
网友评论