js

类型转换

2020-05-20  本文已影响0人  马甲要掉了

转Boolean,String,Number

转Boolean

image.png
测试结果

转字符串

tostring(): null、undefined没有该方法。
String():null和undefined有该方法。转换为'null','undefined'
+" ":本质上调用String()


image.png
测试结果

转数字

image.png 测试结果

对象的转换

对象在转换类型的时候,会调用内置的 [[ToPrimitive]] 函数,对于该函数来说,算法逻辑一般来说如下

四则运算符

加法运算符不同于其他几个运算符,它有以下几个特点:

  1. 运算中其中一方为字符串,那么就会把另一方也转换为字符串
  2. 如果一方不是字符串或者数字,那么会将它转换为数字或者字符串
1 + '1' // '11'
true + true // 2
4 + [1,2,3] // "41,2,3"

对于第一行代码来说,触发特点一,所以将数字 1 转换为字符串,得到结果 '11'
对于第二行代码来说,触发特点二,所以将 true 转为数字 1
对于第三行代码来说,触发特点二,所以将数组通过 toString 转为字符串 1,2,3,得到结果 41,2,3
另外对于加法还需要注意这个表达式 'a' + + 'b'

'a' + + 'b' // -> "aNaN"

因为 + 'b' 等于 NaN,所以结果为 "aNaN",你可能也会在一些代码中看到过 + '1' 的形式来快速获取 number 类型。

那么对于除了加法的运算符来说,只要其中一方是数字,那么另一方就会被转为数字

4 * '3' // 12
4 * [] // 0
4 * [1, 2] // NaN

比较运算符

  1. 如果是对象,就通过 toPrimitive 转换对象
  2. 如果是字符串,就通过 unicode 字符索引来比较
let a = {
  valueOf() {
    return 0
  },
  toString() {
    return '1'
  }
}
a > -1 // true

在以上代码中,因为 a 是对象,所以会通过 valueOf 转换为原始类型再比较值。
字符串、布尔与number作比较 转化为number来比较

上一篇 下一篇

猜你喜欢

热点阅读