在JavaScript中对于值的比较中不管比较的值类型是什么,最终的比较后得到的结果为一个Boolean类型的值。返回true 则表示 "yes" "正确","真",返回false 则表示"no","错误","假"。
1.String 类型的比较
单个字符比较时是通过参考字符在Unicode编码中的顺序来判断
'A' > 'Z' // false
'a' < 'z' // true
单词比较时,也是通过参考Unicode编码的顺序来判断,当比较两个单词的第一个字符在Unicode中的顺序相同时,则经常第二个字的比较,只要相同就一直比较下去,直到比较出结果,如果两个单词的第一个字符一开始不同就立刻得到比较结果,不再比较接下去的比较
"Apple" > "Orange" // false
"Apple" > "Apply" // false
"Apple" > "App" // true
2.Numbe类型的比较
Number类型值的比较就比较简单通过大小来进行判断可以。
4 > 1 // true
4 < 5 // true
4 <= 5 // true
5 >= 4 // true
3.Boolean类型的比较
其实Boolean类型也是可以做比较的,true 被视为 1 ,false 被视为 0
true > false // true
true < false // false
4.String,Number,Boolean之间的比较
在进行String,Numbers,Boolean值之间进行比较的时, > ,< ,<=,>=,!=,== 等运算符将会先判断比较数值的类型是否是Number类型如果不是那将转换为Number类型再比较其大小。
'6' < 7 // true
true < 7 // true
false > 7 // false
'6' > true // true
false < 7 // true
'' == false // false
5. == 与 === 类型比较区别
==为非严格等于,=== 为严格等于,在使用 == 比较两个值时,== 会先判断值的类型,如果不是Number 类型则将其类型转换为Number 类型,再进行比较。 而在使用=== 比较两个值时,它将不会进行类型转换,如果判断类型并不相同,将直接放回false ,如果是相同类型则进行数值不比较。!= 与 !== 同上。
'1' == 1 // true
false == 0 // true
true == 1 // true
null == 0 // false
undefined == 0 // false
上面将通过== 非严格等于来比较两个值,它将先转换类型为Number 再进行 比较。
'1' === 1 // false
false === 0 // fasle
true === 1 // false
1 === 1 // true
null === 0 // false
undefined === 0 // false
上面例子是通过 === 严格等于来比较两个值, 如果类型不同将返回false,类型相同比较值。不做类型转换。
注:当通过 == 与 === 比较两个对象时。比较的是对象的内存地址是否相同。
let a = {};
let b = a;
let c = {};
a == b // true
a == c // false
a === b // true
a === c // false
上面例子中 a 和 b 的内存地址相同, a,b 分别于 c 的内存地址不同。
6. null 与 undefined的比较
非严格模式下
null == undefined // true
null == 0 // false
undefined == 0 // false
undefined === null // false
注: JavaScript 存在一个特殊的规则,会判定它们相等。他们俩就像“一对恋人”,仅仅等于对方而不等于其他任何的值。
严格模式下
null === undefined // false
null == undeined // true
null 与 undefined类型不相同,所以不恒等于。
总结:
- 类型比较后将返回的是Booleanl类型的值
- String 类型的值比较将由Unicode编码中的顺序来判断
- === 比较时不进行类型转换,== 将会进行类型转换
- === 与 == 比较两个对象时,比较的是对象的内存地址是否为相同
- null与undefined 在非严格模式下相等,在严格模式下不相等
- null和undefined 在JavaScript 中不等于任何值。与任何值比较时都为false
- 在通过>,<,<=,>=,!=,==,比较值时,将先进行类型判断,如果类型不是Number类型那会进行类型转换为Number,最后比较值的大小,如果是Number类型就无需转换。