JavaScript 隐式转换小例子

壹题git

第 116 题:输出如下代码运行结果
1 + '1'

2 * '2'

[1, 2] + [2, 1]

'a' + + 'b'
复制代码

1 + '1'

加法运算符的做用是数值求和或者字符串拼接。只要有一个操做数是字符串,即为字符串拼接。github

1 + '1' // '11'
复制代码

2 * '2'

乘法运算符的结果是操做数的乘积。故对操做数进行 ToNumber 类型转换。spa

2 * '2' // 4
复制代码

[1, 2] + [2, 1]

两个对象的值进行 + 运算符,确定要先进行隐式类型转换为原始类型才能进行计算。code

  1. 进行 ToPrimitive 转换,因为没有指定 PreferredType 类型,默认会进行 ToPrimitive(input, Number) 运算。
  2. 因此会执行 valueOf 方法,返回 '1, 2',是原始值。
  3. 同理,上述代码简化为 '1, 2' + '2, 1'。
[1, 2] + [2, 1] // '1, 22, 1'
复制代码

'a' + + 'b'

一元正号运算符位于其操做数前面,计算其操做数的数值,若是操做数不是一个数值,会尝试将其转换成一个数值。 尽管一元负号也能转换非数值类型,可是一元正号是转换其余对象到数值的最快方法,也是最推荐的作法,由于它不会对数值执行任何多余操做。它能够将字符串转换成整数和浮点数形式,也能够转换非字符串值 true,false 和 null。小数和十六进制格式字符串也能够转换成数值。负数形式字符串也能够转换成数值(对于十六进制不适用)。若是它不能解析一个值,则计算结果为 NaN。对象

'a' + (+ 'b') // 'aNaN'
复制代码
相关文章
相关标签/搜索