js类型间的隐式转换,==比较规则

1. 数学运算符的转换规则

  1.1 减、乘、除

  在对各种非Number类型运用数学运算符(- * /)时,会先将非Number类型转换为Number类型。

1 - true // 0, 首先把 true 转换为数字 1, 然后执行 1 - 1
1 - null // 1,  首先把 null 转换为数字 0, 然后执行 1 - 0
1 * undefined //  NaN, undefined 转换为数字是 NaN
2 * ['5'] //  10, ['5']首先会变成 '5', 然后再变成数字 5

  1.2 加法的特殊性,规则优先级从上到下

  •   一侧为String类型,另一侧为原始类型,将原始类型转换为字符串类型
  •     一侧为Number,另一侧为非String的原始类型,将原始类型转换为Number
  •        一侧为Number,另一侧为引用类型,将两者转为字符串然后进行拼接
123 + '123' // 123123   (规则1)
123 + null  // 123    (规则2)
123 + true // 124    (规则2)
123 + {}  // 123[object Object]    (规则3)

 

2. 逻辑判断中的类型转换

  2.1 null,undefined,'',NaN,0,false转换为false,其余转换为true({}, [])

    2.2 '=='比较的5条规则

 

  2.2.1 NaN与任何值比较都为false

NaN == NaN // false

 

  2.2.2 Boolean与其他值比较时,Boolean首先转为Number

true == 1  // true 
true == '2'  // false, 先把 true 变成 1,而不是把 '2' 变成 true
true == ['1']  // true, 先把 true 变成 1, ['1']拆箱成 '1', 再参考规则3
true == ['2']  // false, 同上
undefined == false // false ,首先 false 变成 0,然后参考规则4
null == false // false,同上

 

  2.2.3 String与Number比较,先将String转换为Number

123 == '123' // true, '123' 会先变成 123
'' == 0 // true, '' 会首先变成 0

 

  2.2.4 nul==undefined为true,除此之外null、undefined与其他任何值比较均为false。

null == undefined // true
null == '' // false
null == 0 // false
null == false // false
undefined == '' // false
undefined == 0 // false
undefined == false // false

  2.2.原始类型与引用类型作比较,引用类型依照ToPrimitive(先调用valueOf后调用toString)规则转为原始类型

'[object Object]' == {} 
// true, 对象和字符串比较,对象通过 toString 得到一个基本类型值
'1,2,3' == [1, 2, 3] 
// true, 同上  [1, 2, 3]通过 toString 得到一个基本类型值

 

posted @ 2021-04-16 15:20  千昭。  阅读(80)  评论(0)    收藏  举报