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,与原来的操作数符号无关。 |
相关文章推荐
- JavaScript学习(4.4):运算符概述
- JSP:自定义标签之开发迭代标签
- JavaScript学习(4.3):调用表达式和对象创建表达式
- JSP:自定义标签之开发<c:if><c:else>标签
- js获取表单table 中文本框的值
- JSP:自定义标签之<c:if>标签
- JavaScript学习(4.2):函数定义表达式和属性访问表达式
- JSP:自定义标签之防盗链标签开发
- js中document.write的那点事
- JavaScript学习(4.1):原始表达式、对象和数组初始化表达式
- VS调试时JSON格式文件加载不了
- JSP:自定义标签的详细说明
- 中国省市 JS代码
- WCF 自托管、无配置文件实现jsonp(跨域)的访问
- javascript中操作节点的属性
- javascript中数组常用方法
- javascript中数组常用方法
- javascript中dom节点操作(创建节点、增加节点、删除节点、克隆节点)
- 【南大软院大神养成计划:第九天】久违了,JavaScript——入门篇(一)
- js字符串的分割