首页 > 两变量这样写为什么却不相加

两变量这样写为什么却不相加

<script>
a='1';
b='5';
alert(a+b);
</script>

运行后返回15而不是6 它直接把两个变量放一块了 没有进行相加 怎样解决?


如果看过js的基本类型,你就知道这是两个字符串,+号的用法在数字中是相加,在字符串中是拼接的意思,也就是你看到的效果,成了一个‘15’的字符串。如果你要做数字相加,建议先转化成数字类型。楼上回答了,我就不补充了。


-(-a-b);

(a-0)+(b-0);

字符串加字符串是字符串拼接,而不会使用期待的类型转换。


+还有另一个用法,字符串拼接.


这些运算符在遇到变量时会进行类型转换。

对于+运算符而言,当其中一个变量是字符串时,会将另一个也转为字符串,进行字符串拼接。

只有当两个变量都是数字类型时,才是两数相加。


首先javascripts为弱类型语言。使用a='1';
b='5'; 定义赋值变量a和b,这样a和b都被定义为了字符串,而运算符“+”除了可以用作数值的加法运算外还可以用来连接字符串,因此此处因为两个变量都为字符串所以“+”号的作用是字符串拼接而不是使数值作加法运算。

解决方法:
直接这样赋值:
a=1;
b=5;
即可直接进行加法运算

a='1';
b='2';

把字符串变量a和b转化为数值
①使用parerInt()方法:

        a='1';
        b='5';
        alert(parseInt(a)+parseInt(b));
        

②使用强制类型转换

alert(Number(a)+Number(b));

③使用弱类型转换:

        a='1'-0; //实际上使a='1'字符转换为数值
        b='5'-0; //实际上使b='5'字符转换为数值
        alert(a+b);
        
        

另外注意在定义变量时最好加上var,除非你想在函数内定义全局变量,不然不使用var关键字定义的变量都为全局变量。


碰到程序的行为和自己理解的不一致的时候,最好的办法不是自己在那猜,而是去看看标准到底是怎么规定的。对于“+”运算符,标准写得很清楚:

AdditiveExpression : AdditiveExpression + MultiplicativeExpression

  1. Let lref be the result of evaluating AdditiveExpression.

  2. Let lval be GetValue(lref).

  3. ReturnIfAbrupt(lval).

  4. Let rref be the result of evaluating MultiplicativeExpression.

  5. Let rval be GetValue(rref).

  6. ReturnIfAbrupt(rval).

  7. Let lprim be ToPrimitive(lval).

  8. ReturnIfAbrupt(lprim).

  9. Let rprim be ToPrimitive(rval).

  10. ReturnIfAbrupt(rprim).

  11. If Type(lprim) is String or Type(rprim) is String, then

    1. Let lstr be ToString(lprim).

    2. ReturnIfAbrupt(lstr).

    3. Let rstr be ToString(rprim).

    4. ReturnIfAbrupt(rstr).

    5. Return the String that is the result of concatenating lstr and rstr.

  12. Let lnum be ToNumber(lprim).

  13. ReturnIfAbrupt(lnum).

  14. Let rnum be ToNumber(rprim).

  15. ReturnIfAbrupt(rnum).

  16. Return the result of applying the addition operation to lnum and rnum.

当左值或者右值是string的时候将会把两者都转换为string,然后将两者拼接起来并返回。


正确的写法应为
<script>
a='1';
b='5';
alert(Number(a)+Number(b));
</script>


会把两个都当成字符串拼接,如果你把第一个设置成1,结果就是6了


js默认是字符串拼接


var a ='5', b = '6';
console.log(parseInt(a) + parseInt(b));
【热门文章】
【热门文章】