JS的比较运算符,数值自动转换笔记

JS的比较运算符,数值自动转换笔记

JS的比较运算符比较复杂,在学习了阮一峰老师JS参考教程之后做了笔记

总体思路

1、相等或者不相等 先转换在比较
2、全等或者不全等 比较不转换
3、NaN与什么比较都是false

数值的自动转换

数值的自动转换分为三种情况 Number Boolean String

Number

// 数值:转换后还是原来的值
Number(324) // 324

// 字符串:如果可以被解析为数值,则转换为相应的数值
Number('324') // 324

// 字符串:如果不可以被解析为数值,返回 NaN
Number('324abc') // NaN

// 空字符串转为0
Number('') // 0
// 布尔值:true 转成 1,false 转成 0
Number(true) // 1
Number(false) // 0

// undefined:转成 NaN
Number(undefined) // NaN

// null:转成0
Number(null) // 0

注意Number解析对象的时候先valueOf后toString,都不行在报错。

Number({
  valueOf: function () {
    return 2;
  }
})
// 2

Number({
  toString: function () {
    return 3;
  }
})
// 3

Number({
  valueOf: function () {
    return 2;
  },
  toString: function () {
    return 3;
  }
})
// 2

String

String(123) // "123"
String('abc') // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"

String 与Number相反先toString后valueOf

Boolean

undefined
null
-0或+0
NaN
''(空字符串)

以上结果为false,其余为true。对象全部转化为true。

非相等比较

非想等比较首先看能否是字符串如果是则比较Unicode码点,如果无法转换则将其转换为数值在进行比较。

原始类型的非相等比较

原始类型的非相等比较为先转换为数值在比较。对于对象要先执行valueOf后执行toString。

var x = [2];
x > '11' // true
// 等同于 [2].valueOf().toString() > '11'
// 即 '2' > '11'
// 两个字符串先比较第一个码点'2'>'1'

x.valueOf = function () { return '1' };
x > '11' // false
// 等同于 [2].valueOf() > '11'
// 即 '1' > '11'

严格相等运算符

1、不同类型返回false
true === “true” // false
2、相同类型该是啥就是啥

+0==-0

3、对象等复合类型比较地址

{} === {} // false
[] === [] // false
(function () {} === function () {}) // false

4、undefined与null自身严格相等

undefined === undefined // true
null === null // true

5、严格不相等是严格相等的反

相等运算符

1、原始类型值会转换为数值进行比较
2、对象与原始类型进行比较则对象先转换为原始类型的值在进行比较

[1] == 1 // true
// 等同于 Number([1]) == 1

[1] == '1' // true
// 等同于 String([1]) == Number('1')

[1] == true // true
// 等同于 Number([1]) == Number(true)

3、undefined和null与其他类型的值比较时,结果都为false,它们互相比较时结果为true。

奇形怪状的解

0 == ''             // true
//相等比较 转换为两个数字 0==0
0 == '0'            // true
//相等比较 转化为两个数字 0==0
2 == true           // false
//转换为数字 2==1
2 == false          // false
//2==0
false == 'false'    // false
// 0==NaN
false == '0'        // true
//转换为数字 0==0
false == undefined  // false
//undefined与 任何相等都不等
false == null       // false
//null与 任何相等都不等
null == undefined   // true

' \t\r\n ' == 0     // true

以上整理自阮一峰老师的博客

你可能感兴趣的:(Javascript,javascript)