在JavaScript中"+"什么时候是链接符号,什么时候是加法运算?

二元加法运算符“+”在两个操作数都是数字或都是字符串时,计算结果是显而易见的。加号“+”的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数会转换为字符串,加号讲践行字符串的连接操作。如果两个操作数都不是类字符串(string-like)的,那么都讲进行算数加法运算。

“+”操作符的行为表现为:

  • 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类值:日期对象通过toString()方法执行转换,其他对象则通过valueOf()方法执行转换(如果valueOf()方法返回一个原始值的话)。由于多数对象都不具备可用的valueOf()方法,因此它们会通过toString()方法来执行转换。

如果对这段描述不太清楚,很可能是JavaScript中的一些基础概念还比较模糊,建议阅读以下文章:
[JavaScript中什么是对象?什么是原始值?]
[ JavaScript中对象转换为原始值遵循哪些原则?]

  • 都进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串连接。
  • 否则,两个操作数都将转换为数字(或者NaN),然后进行加法操作。
1         1+2;// => 3:加法
2         "1"+"2" //=> b="12" 字符串连接
3         "1"+2  //=> c="12" 数字转换为字符串后,进行字符串连接
4         1+{}//=> "1[object object]":对象转换为字符串后进行字符串连接
5         true+true // =>2 :布尔值转换为数值后做加法
6         2+null  // => 2 :null转换为0后做加法
7         2+undefined // => NaN :undefined转换为NaN后做加法

当加号运算符合字符串和数字一起使用时,需要考虑加法结合性对运算顺序的影响。也就是说,运算结果是依赖于运算符的运算顺序的,比如:

1         1+2+"blind mice" // =>"3blind mice"
2         1+(2+"blind mice") // =>"12blind mice" 

猜你喜欢

转载自www.cnblogs.com/f6056/p/10852933.html
今日推荐