JavaScript中值的比较

449 阅读3分钟

在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类型就无需转换。