JavaScript

js类型转换—理论篇

2019-08-14  本文已影响0人  Aniugel

1. 减号、乘号、除号、取模...

这些操作符会尝试将他们的操作数转换为数字(使用Number()),如果操作数没法转换为数字的话,他们的结果就是NaN

2. 加号(+)

当没有特别指定的时候参考(1),但有如下几种例外情况:

加法运算会触发三种类型转换:将值转换为原始值,转换为数字,转换为字符串。

1 + '1' // '11'
2 * '2' // 4
[1, 2] + [2, 1] // '1,22,1'
// [1, 2].toString() -> '1,2'
// [2, 1].toString() -> '2,1'
// '1,2' + '2,1' = '1,22,1'

3. ==、!=

在条件判断运算 == 中的转换规则是这样的:

  1. 如果比较的两者中有布尔值(Boolean),会把 Boolean 先转换为对应的 Number,即 0 和 1,然后进行比较。
  2. 如果比较的双方中有一方为 Number,一方为 String时,会把 String 通过 Number() 方法转换为数字,然后进行比较。
  3. 如果比较的双方中有一方为 Boolean,一方为 String时,会将双方转换为数字,然后再进行比较。
  4. 如果比较的双方中有一方为 Number,一方为Object时,则会调用 valueOf 方法将Object转换为数字,然后进行比较。对象在转换基本类型时,首先会调用 valueOf 然后调用 toString。并且这两个方法你是可以重写的。

这两个运算符在大部分上面都是与(1)相同的,不同的是:

在条件判断时,除了 undefined, null, false, NaN, '' , 0, -0,其他所有值都转为 true,包括所有对象

建议在所有使用条件判断的时候都使用全等运算符 ===
来进行条件判断。全等运算符会先进行数据类型判断,并且不会发生隐式类型转换。

4. 大于、小于、大于等于、小于等于

同(一),但是对于两个操作数均是字符串的时候&无法转换时的返回值会有不同。
当两个操作数均是字符串的时候,它会执行大家熟悉的字符串比较,即从左到右依次比较每一个字符的ASCII码,若出现符合操作符的情况,则返回true,否则返回false。
无法将操作数转换为数字的情况下总是返回false。

image image

来源:https://www.jianshu.com/p/5b3338346f99

上一篇下一篇

猜你喜欢

热点阅读