JS一共有六大基本数据类型:number、string、boolean、null、undefined、object。
当不同数据类型相加减时,会产生隐式类型转换。
number
1 | // number+number:数字相加,得出结果 |
string
1 | // string+string:字符串拼接 |
Object
在JavaScript中,当你尝试对Object
类型与其他数据类型进行加减运算时,JavaScript会遵循类型转换的规则来处理这些操作。以下是一些具体的例子和解释:
1. Object与Number相加减
当你将一个对象与一个数字相加或相减时,JavaScript会尝试将对象转换为一个数字。这通常是通过调用对象的valueOf()
方法实现的,如果valueOf()
返回的不是一个数字类型,那么会尝试调用toString()
方法,并将字符串转换为数字。
1 | let obj = { |
2. Object与String相加减
当对象与字符串进行加减运算时,对象会通过toString()
方法转换为字符串,然后再进行拼接或相减(如果结果是有意义的)。
1 | let result3 = obj + ' is the answer'; // 结果为 '42 is the answer' |
3. Object与Boolean相加减
布尔值true
和false
在与对象进行加减运算时会被转换为数字1
和0
。
1 | let result5 = obj + true; // 结果为 43,因为true转换为1,然后与对象转换后的数字相加 |
4. Object与Null相加减
null
在进行加减运算时会被转换为数字0
。
1 | let result7 = obj + null; // 结果为 42,因为null转换为0,然后与对象转换后的数字相加 |
5. Object与Undefined相加减
undefined
在进行加减运算时保持为undefined
,它不会被转换为数字或字符串。
1 | let result9 = obj + undefined; // 结果为 'undefined',因为undefined无法转换为数字,所以对象转换为字符串后进行拼接 |
6. Object与Object相加减
对象与对象之间的加减运算通常没有意义,除非你自定义了对象的valueOf()
或toString()
方法来返回一个可用于加减运算的值。
1 | let obj2 = {}; |
需要注意的是,对象的valueOf()
和toString()
方法的实现方式会影响加减运算的结果。默认情况下,大多数对象的toString()
方法会返回'[object Type]'
,其中Type
是对象的类型。如果你需要对象在加减运算中表现为特定的数值,你需要自定义这些方法来返回相应的数值。
undefined
- undefined与基本类型(除String)数据(undefined|null|NaN|boolean|number)做加(+)运算,不分先后,结果都为:
NaN
。 - undefined与字符串进行加(+)运算,不分先后,从左往右
按字符串相加
。 - undefined与数组进行加(+)运算时会调用.toString()方法,不分先后,结果为:
'undefined1,2,3'
,并从左往右按字符串相加
。 - undefined与对象进行加(+)运算时会调用.toString()方法,不分先后,结果为:[object Object],并
从左往右按字符串相加
。 - undefined与任何类型的数据进行减(-)||乘(*)||除(/)||取模(%)运算,不分先后,结果都为:
NaN
。