nfssuzukaze / Blog

0 stars 0 forks source link

JavaScript 的数据类型转换 #24

Open nfssuzukaze opened 3 years ago

nfssuzukaze commented 3 years ago

数据类型之间的转换

数据类型之间转换的规则

1. 转换为 Boolean

2.转换为 Number

3.转换为 String

4.引用类型转换为原始值的规则

方法:ToPrimitive

ToPrimitive(input, PreferredType)

隐式类型转换

一元操作符

二元操作符

== 相等

当执行 x == y 时:

  1. 如果x与y是同一类型:

    1. x是Undefined,返回true
    2. x是Null,返回true
    3. x是数字:
      1. x是NaN,返回false
      2. y是NaN,返回false
      3. x与y相等,返回true
      4. x是+0,y是-0,返回true
      5. x是-0,y是+0,返回true
      6. 返回false
    4. x是字符串,完全相等返回true,否则返回false
    5. x是布尔值,x和y都是true或者false,返回true,否则返回false
    6. x和y指向同一个对象,返回true,否则返回false
  2. x是null并且y是undefined,返回true

  3. x是undefined并且y是null,返回true

  4. x是数字,y是字符串,判断x == ToNumber(y)

  5. x是字符串,y是数字,判断ToNumber(x) == y

  6. x是布尔值,判断ToNumber(x) == y

  7. y是布尔值,判断x ==ToNumber(y)

  8. x是字符串或者数字,y是对象,判断x == ToPrimitive(y)

  9. x是对象,y是字符串或者数字,判断ToPrimitive(x) == y

  10. 返回false

若是不同类型值的判断:

  1. 遇到 bool 类型的值,先将 bool 转换为 number 类型,再比较
  2. 如果遇到 string 和 number 比较,先将 string 转换为 number,再比较
  3. 如果遇到 [string | number] 与 [引用类型值] 比较,先将 [引用类型值] 转换为 [string],再比较
  4. 如果遇到 null ,且与其相比较的不是 undefined,则直接返回 false
  5. 如果遇到 undefined ,且与其相比较的不是 null,则直接返回 false

注:若数组中的元素有 null ,则在其转换为字符串时,null 元素会被忽略

console.log([null, 1, null].toString()) //=> ",1,"