基本的算术表达式有加、减、乘、除、求余表达式,组成这五种基本算术表达式的有加、减、乘、除、求余五种基本的运算符,在这五种基本的运算符种又有加运算符有点特殊,因为加(+)运算符除了加操作外,还有连接字符串的操作,比较特殊,剩下的四种运算符就是比较单一了,也比较好理解,就是在必要的时候将操作数转换成数字,然后做求差、积、商、余数的运算。
所有的无法转换为数字的操作数都被转换为NaN值。如果操作数是NaN,或者转换结果为NaN,那么算术运算的结果也是NaN。
运算符/,求商运算,用第二个操作数来除第一个操作数。排除一些特殊情况如操作数有NaN或转换后为NaN的,结果都为一个Number值。如果我们有使用过其他的强类型的编程语言,数值型区分整型和浮点型数值,除运算结果也为相应类型的值,即用一个整型值除另外一个整型值时,结果也为一个整型值,如果用一个浮点型数值除另外一个浮点型数值时,结果也为浮点型。但是javascritp是一种弱类型的编程语言,在这种语言种,数值型数据都统一为Number类型,没有细分整型和浮点型,所有的数值都为浮点型的,相应的,运算结果也都是浮点型的。如5/2的结果为2.5,4/2的结果为2。
除数为0的运算结果为正无穷大或负的无穷大,0/0的结果为NaN。所有的这些运算都不会报错。
求余运算(%)的运算是求第一个操作数对第二个操作数的模,即第一个操作数除以第二个操作数的余数。结果的符号(正负)和第一个操作数的符号一致。如5%2值为1,-5%2值为-1。
求余运算通常用于整型数值,但也用于浮点型数值,如4.3%2.1值为0.1。
“+”运算符
"+"运算符可以对两个数字进行求和运算,也可以对两个字符串做连接操作。
1+2=》2
"1"+"2"=》"12"
当两个操作数的数据类型一致的时候,运算结果的值非常好确认,两个操作数都是字符串,则运算结果就是两个操作数的连接操作,如果两个操作数都是数字,那么就是对两个操作数的求和操作。然而对于操作数的类型不一致的时候,则需要进行一些对操作数的数据类型转换,且操作行为依赖于类型转换的结果。加号的转换规则优先考虑字符串连接,具体的转换规则如下:
1.如果其中一个操作数为字符串或者为转换为字符串的对象,那么另外一个操作数将会转换为字符串,“+”将进行字符串的连接操作;
2.如果两个操作数都不是类字符串类型的,那么“+”将进行加法求和操作。
从技术上讲,加法操作符的行为表现为:
- 如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始类型值:日期对象则通过toString()方法进行转换,其他对象则通过valueOf()执行转换(如果使用valueOf()方法可以返回一个原始类型值的话)。由于很多的对象并不具备可用的valueOf()方法,那么就会通过toString()方法进行转换;
- 在进行了对象到原始类型值的转换后,如果其中一个操作数为字符串,则另外一个操作数也会转换为字符串,然后进行字符串的连接操作;
- 否则,两个操作都将转换为数字(结果可能为NaN),然后进行加法操作。
最后还有一点需要注意的,就是当表达式有多个数字或字符串一起使用时,需要注意加法的结合性以及括号对运算顺序的影响。
alert(1+2+"Hello"); //3Hello
alert(1+(2+"hello")); //12hello