相等比较、关系比较总结
相等比较:
以 x 和 y 为例
‘==’比较时可能会进行自动类型转换,规则如下:
- 若 x 与 y 有一个为NaN,则返回false(NaN != NaN)。
- null 、undefined不等于其它任何值,它们只等于自己或对方(null == undefined)。
- 若 x 或 y 为true、false,则先将它转换为数字1、0,再比较。
- 若两者均为对象,则比较的是引用值。
- 若其中之一为对象,先把对象‘拆装’转换为和对方一样的基本类型,再进行比较。("" == [ ],0 == [ ])
- 字符串与数字比较,先把字符串转为数字再比较,"" == 0,"\n" == 0
‘===’比较时不进行类型转换,规则如下:
- 如果x、y类型不同,则返回false
- 类型相同时:
2.1 若有一个为NaN,则返回false
2.2 引用值不相同(引用不同一对象,即使对象看上去一样),则返回false
2.3 值不相等(除了+0 === -0 //true),返回false
2.3 其它比较均返回true
注意:
- 如果x、y中有一个为true或false,千万不要使用来比较,最好用=来比较。
- 如果x、y中有[ ]、""、0,尽量不要使用来比较,最好用=来比较。
- 最好用typeof x == 'string'; typeof操作符总是返回7个字符串之一,这里用‘==’是绝对安全的,不会发生类型转换。
关系比较
以比较a、b为例
- 比较双方先调用
valueOf()或toString()
方法,若结果出现了非字符串,则转换为数字进行比较 - 比较双方均为字符串,则按字母顺序表来比较
如:两个一样的对象,var a = {x:2}; var b = {x:1};
比较时先全部转换为字符串,结果都为'[object Object]'
,所以a>b,a<b均为false,而a>=b,a<=b均为true,但是a == b为false,因为此时应用的是'=='比较规则。
读完觉得学到点什么,就( 顶一个!)
posted on 2016-10-02 22:10 SuriFuture 阅读(309) 评论(0) 编辑 收藏 举报