您的位置:首页 > Web前端 > JavaScript

JavaScript学习(4.5):算术表达式

2015-11-25 09:16 561 查看
4.8 算术表达式

4.8.1 “+”运算符
二元运算符“+”可以对两个数字做加法,也可以做字符串连接。
加号的转换规则优先考虑字符串连接,如果其中一个操作数是字符串或者转换为字符串的对象,另外一个操作数将会转换为字符串,加法将进行字符串的连接操作,如果两个数都不是类字符串,那么将进行算术加法运算。

如果其中一个操作数是对象,则对象会遵循对象到原始值的转换规则转换为原始值:日期对象通过toString()方法执行转换,其他对象则通过valueOf()方法执行转换(如果valueOf方法返回一个原始值的话),由于多数对象都不具备valueOf()方法,因此它们会通过toString()方法来执行转换。
在进行了对象到原始值的转换后,如果其中一个操作数是字符串的话,另一个操作数也会转换为字符串,然后进行字符串的连接。
否则,两个操作数都将转换为数字(或者NaN),然后进行加法运算。

1 + 2 // 3:加法
'1' + '2' // '12':字符串连接
'1' + 2 // '12':字符串连接
1 + {} //"1[object Object]":对象转换为字符串进行字符串连接,valueOf返回简单对象,转而使用toString
true + true //2:true首先valueOf,转换为boolean是原始值,然后原始值转换成数字
2 + null //2:null就是原始值,另外一个对象是数字,原始值转换为数字
'2' + null // '2null':null是原始值,另外一个操作数是字符串,null转换成字符串‘null’
2 + undefined //NaN 与上面类似
'2' + undefined //'2undefined'

要考虑加法的结合性对运算顺序的影响,即运算结果是依赖于运算符的运算顺序的:
1 + 2 +‘a ’ // 3a
1 + (2 + 'a') //12a
4.8.2 一元算术运算符
一元运算符作用于一个单独的数,并产生一个新值。在JavaScript中,一元运算符具有很高的优先级,而且都是右结合,+ - ++ --
+ - 即是一元运算符,也是二元运算符。

一元加法(+)
一元加法运算把操作数转换为数字(或者NaN),并返回这个转换后的数字,如果操作数本身就是数字,则直接返回这个数字。
一元减法(-)
当‘-’用做一元运算符,它会根据需要把操作数转换为数字,然后改变运算结果的符号。

递增(++)
递增“++”运算符对其操作数进行增量+1操作,操作数是一个左值,运算符把操作数转换为数字,然后加1,并将加1后的数值重新赋值给对象。
前增量 -- 先增加再返回 后增量 -- 先返回 后增加

++x 和 x = x+1 不完全相同,区别点在于字符串连接

注意分号:
‘++’ ‘--’ 运算符,这两个表达式可以当做表达式的前缀和后缀,如果用做后缀表达式,他和表达式应当在同一行,否则,行尾将填补分号,同时 ‘++’ ‘--’将会作为下一行代码的前缀操作符并与之一起解析;
x
++
y
会解析为
x;
++y;

后增量,运算符和操作数之间不能有换行符。

4.8.3 位运算符
位运算符可以对由数字表示的二进制数据进行更低层级的按位运算,他们作用于数值类型的操作数并返回数字,所以也归类为算术运算符。这里四个运算符都是对操作数的每个位进行布尔运算,这里将操作数的每个位当做布尔值(1=true,0=false),其他三个运算符用来进行左移位和右移位。
位运算符要求它的操作数是整数,这些整数表示为32位的整型而不是64位的浮点型。必要时,位运算符首先将操作数转换为数字,并将数字强制表示为32位整型,这会忽略原格式中的小数部分和任何超过32位的二进制位。移位运算符要求右操作数在0·31之间。在将其操作数转换为无符号32位整数后,他们将舍弃第五位之后的二进制数,以便生成一个位数正确的数字,注意:位运算符将会把NaN、Infinity和-Infinity都转换为0.

按位与(&)---- 对它的整型操作逐位执行布尔与(AND)操作,只有两个操作数中相对应的位都是1,结果中的这一位才是1,例如:0x1234 & 0x00FF = 0x0034
按位或(|) --- 对它的整型操作数逐位执行布尔或(OR)操作。如果其中一个操作数相应的位为1,或者两个操作数相应位都是1,那么结果中的那一位就是1.例如:0x1234 | 0x00FF = 0x12FF
按位异或(^) --- 对它的整型操作数逐位执行布尔异或(XOR)操作。异或是指第一个操作数或者第二个操作数为true,但两者不能同时为true。例如:0xFF00 ^ 0xF0F0 = 0x0FF0
按位非(~) -- 是一元运算符,位于一个整型参数之前,他将操作数的所有位取反。相当于改变它的符号-1,例如:~0x0F = 0xFFFFFFF0 或-16
左移 (<<) --- 将第一个操作数的所有二进制位进行左移操作,移动的位数由第二位操作数指定,移动的位数是0·31之间的一个整数。新的第一位用0来补充,舍弃第32位,左移1位相当于*2,2位相当于*4 例如:7<<2 = 28
带符号右移(>>) --- 右移操作,正数高位补1,负数高位补0,例如: 7 >> 1 = 3, -7 >> = -4
无符号右移(>>>) --- 与右移操作一样,只是左边的最高位总是补0,与原来的操作数符号无关。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: