JavaScript各种类型数据相加结果

  1. 1. number
  2. 2. string
  3. 3. Object
    1. 3.1. 1. Object与Number相加减
    2. 3.2. 2. Object与String相加减
    3. 3.3. 3. Object与Boolean相加减
    4. 3.4. 4. Object与Null相加减
    5. 3.5. 5. Object与Undefined相加减
    6. 3.6. 6. Object与Object相加减
  4. 4. undefined

JS一共有六大基本数据类型:number、string、boolean、null、undefined、object。
当不同数据类型相加减时,会产生隐式类型转换。

number

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// number+number:数字相加,得出结果
console.log(1+2) // 3

// number+string:会和字符串拼接,得到一个字符串
console.log(1+'2') // ’12‘

// number+boolean:true和false会被当做1和0进行数学运算
console.log(1+true) // 2
console.log(1+false) // 1

// number+boolean:true和false会被当做1和0进行数学运算
console.log(1+true) // 2
console.log(1+false) // 1

// number+null:null作0处理
console.log(1+null) // 1
console.log(2+null) // 2

// number+undefined:返回NaN
console.log(1+'2') // ’12‘

string

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// string+string:字符串拼接
console.log('a'+'b')// ’ab'
// string-string:NaN
console.log('a'-'b')// NaN

// string+boolean:会调用toString()转为字符串后再进行拼接
console.log('a'+true)// 'atrue'
console.log(false+'b')// 'falseb'

//string+null(同undefined、NaN):同样会toString()为'null'后再进行拼接
console.log('a'+null)// 'anull'
console.log(undefined+'b')// 'undefinedb'
console.log(NaN+'b')// 'NaNb'

Object

在JavaScript中,当你尝试对Object类型与其他数据类型进行加减运算时,JavaScript会遵循类型转换的规则来处理这些操作。以下是一些具体的例子和解释:

1. Object与Number相加减

当你将一个对象与一个数字相加或相减时,JavaScript会尝试将对象转换为一个数字。这通常是通过调用对象的valueOf()方法实现的,如果valueOf()返回的不是一个数字类型,那么会尝试调用toString()方法,并将字符串转换为数字。

1
2
3
4
5
6
7
let obj = {
toString: function() { return '42'; },
valueOf: function() { return 42; }
};

let result1 = obj + 1; // 结果为 43,因为对象首先转换为字符串 '42',然后转换为数字 42
let result2 = obj - 1; // 结果为 41,基于相同的转换逻辑

2. Object与String相加减

当对象与字符串进行加减运算时,对象会通过toString()方法转换为字符串,然后再进行拼接或相减(如果结果是有意义的)。

1
2
let result3 = obj + ' is the answer'; // 结果为 '42 is the answer'
let result4 = 'The answer is ' + obj; // 结果同样为 'The answer is 42'

3. Object与Boolean相加减

布尔值truefalse在与对象进行加减运算时会被转换为数字10

1
2
let result5 = obj + true; // 结果为 43,因为true转换为1,然后与对象转换后的数字相加
let result6 = obj - false; // 结果为 42,因为false转换为0,然后与对象转换后的数字相减

4. Object与Null相加减

null在进行加减运算时会被转换为数字0

1
2
let result7 = obj + null; // 结果为 42,因为null转换为0,然后与对象转换后的数字相加
let result8 = obj - null; // 结果为 42,因为null转换为0,然后与对象转换后的数字相减

5. Object与Undefined相加减

undefined在进行加减运算时保持为undefined,它不会被转换为数字或字符串。

1
2
let result9 = obj + undefined; // 结果为 'undefined',因为undefined无法转换为数字,所以对象转换为字符串后进行拼接
let result10 = obj - undefined; // 结果为 42,因为undefined无法转换为数字,所以直接使用对象转换后的数字

6. Object与Object相加减

对象与对象之间的加减运算通常没有意义,除非你自定义了对象的valueOf()toString()方法来返回一个可用于加减运算的值。

1
2
let obj2 = {};
let result11 = obj + obj2; // 结果为 '[object Object][object Object]', 两个对象的字符串表示被拼接

需要注意的是,对象的valueOf()toString()方法的实现方式会影响加减运算的结果。默认情况下,大多数对象的toString()方法会返回'[object Type]',其中Type是对象的类型。如果你需要对象在加减运算中表现为特定的数值,你需要自定义这些方法来返回相应的数值。

undefined

  1. undefined与基本类型(除String)数据(undefined|null|NaN|boolean|number)做加(+)运算,不分先后,结果都为:NaN
  2. undefined与字符串进行加(+)运算,不分先后,从左往右按字符串相加
  3. undefined与数组进行加(+)运算时会调用.toString()方法,不分先后,结果为:'undefined1,2,3',并从左往右按字符串相加
  4. undefined与对象进行加(+)运算时会调用.toString()方法,不分先后,结果为:[object Object],并从左往右按字符串相加
  5. undefined与任何类型的数据进行减(-)||乘(*)||除(/)||取模(%)运算,不分先后,结果都为:NaN