一般来说, 加减法应该是我们学习生涯中接触到的第一个运算符,通常意义下它也是最简单的运算符。
在程序语言中,加减法的情况一般也比较简单,但是在 JavaScript 中加法的情况却比较奇怪,因为它有着大量特殊的情况。
我们举个简单的例子:
1 + '1' = '11';
1 + 'a' = '1a';
1 + [] = '';
从基础数据类型的加法开始,我们得到的结果就变的奇怪了起来。究其根由,其实是 JavaScript 的隐式转换在做怪。
一.什么是 JavaScript 隐式转换?
在讲隐式转换之前,咱们先得回顾一下 JavaScript 的 5 种基础数据类型,3种引用数据类型和 3 个特殊值:
基础数据类型:
- number 类型
- string 类型
- boolean 类型
- null 类型
- undefined 类型
引用数据类型:
- object
- function
- array
特殊值:
- NaN
- +Infinity 和 -Infinity
- +0 和 -0
ok,我们回到隐式转换中,正如我开始举的那个例子一样,JavaScript 的隐式转换总是发生在各种运算符以及特殊的真值判断中(比如说 if),对与 java 来说,一个 Number 类型值 + 一个 Boolean 类型值 是肯定会报错的,但是在 JavaScript 中却不会,因为隐式转换会将 Boolean 类型的值转换为 Number 值。
二. JavaScript 的加法中隐式转换是怎么工作的?
你在百度上搜索 JavaScript 加法特性,你也许会看到这种图解:
或者是这种:
他们是很有用处的内容总结,但是光靠它们并不能帮我们更好的去理解,所以我们需要实例来支撑理论。
我们先来看看一个有趣的例子:
// number + ?
1 + 1 = 2; // number
1 + '1' = "11"; // string
1