操作符是操作数据值的符号, 也叫做运算符.
按照操作个数分为: 一元运算符, 二元运算符, 三元运算符.
按功能分为: 位操作符, 布尔操作符, 乘性操作符, 加性操作符, 关系操作符, 关系操作符, 相等操作符, 条件操作符, 赋值操作符, 逗号操作符.
一元操作符, 只能操作一个值的操作符.
1. 递增递减操作符, 执行前置递增递减的操作符时都是在语句请求前执行的, 在计算机科学领域上讲, 这种情况通常叫做副效应.
规则:
字符串是有限数字字符转化成数字值在加减 1 如果不包含有效数字, 转换成 NaN
浮点型正常转换加减 1
布尔型, false 将转换成 0 加减 1true 相反
对象, 先使用 valueof()方法, 取得一个可操作的值, 如果是 NaN 在使用 toString()方法, 对象变量变成数值变量.
2, 一元加或减操作符
加操作符, 放在数值的前面, 对大小没有影响. 如果是非数值类型, 按照上面规则转化.
减操作符, 放在数值的后面, 数值大小取反. 如其他类型, 按照规则进行转化.
位操作符
是最基本层次上的, 按内存表示数值的位来操作数值.
都是用 32 位进行操作的, 整数以纯二进制格式存储, 31 位中的每一位都表示 2 的幂次方, 第一是 2 的 0 次幂, 第二位 2 的 1 次幂, 以此类推, 没用到位用 0 补充. 负数, 也是二进制存储, 但使用补码. 补码分三步, 1, 求这个数值绝对值的二进制码, 例如(求 - 18 的二进制补码, 先求 18 的二进制码).2, 再求二进制反码, 就是把所有的 0 替换成 1, 所有的 1 换成 0.3, 得到的二进制反码在加 1.
例如 - 18 的二进制码:
0000 0000 0000 0000 0000 0000 0001 0010
然后求二进制反码, 也就是 0 和 1 互换
1111 1111 1111 1111 1111 1111 1110 1101
最后在二进制反码加 1
1111 1111 1111 1111 1111 1111 1111 1110
但是 ECMAscript 不会让我看见这些, 我们只需要理解这个转换过程就好, 在以二进制字符串形式输出负数时, 我们看到的还是负数绝对值二进制码前面加一个负号.
1, 按位非(NOT)
按位非以一个波浪线 (~) 表示, 就是数值的反码. 例如:
- var num1 =25; // 二进制 0000 0000 0000 0000 0000 0000 0000 0001 1001
- var num2 =~num; // 二进制 1111 1111 1111 1111 1111 1111 1111 1111 1110 0110
- alert num2; //-26
也就是操作值的负值减一.
2, 按位或(AND)
按位与由一个 (&) 表示. 将两个数值的每一位对齐, 如果两个数值都为 1, 结果为 1, 其它都为 0.
3, 按位或(OR)
按位或由一个竖线 (丨) 表示. 也是将两个数值每一位对齐, 只有有一个为 1, 结果就为 1, 两个都是 0 的情况下才返回 0.
4, 按位异或(XOR)
由 (^) 表示, 只有一个 1 才返回 1.
5, 左移
由 (<<) 表示, 会将所有数值的所有位向左移动指定的位数. 以 0 补充移动的位数.
6, 有符号的右移
由 (>>) 表示, 会将所有数值的所有位向右移动指定的位数. 以隐藏的符号位填充空白的位数.
7, 无符号右移
由 (>>>) 表示, 和有符号右移一样, 但是以 0 填充空位, 而且无符号二进制码当成正数二进制码, 负数以其绝对值的二进制码补码形式表示, 因此导致无符号右移后结果非常大.
布尔操作符
有 3 个: 非(NOT), 与(AND), 或(OR).
1, 逻辑非 (!) 表示, 将它操作数转换成布尔值, 然后取反.
{对象返回 false; 空字符串返回 true; 非空返回 false; 操作数的数值位 0 返回 true; 任何非 0 返回 false;null 返回 true;NaN 返回 true;Undefined 返回 true.}
也就是将一个值转换成布尔值, 然后对其取反.
2, 逻辑与(&&)
属于短路操作, 即如果有一个操作数决定结果, 就不会对第二个操作数求值. 如果第一个位 false, 无论第二个为什么值, 结果都不可能为 true.
3, 逻辑或(||)
只有有一个满足条件为 true , 就返回为 true 那个为操作数.
乘性操作符
定义了 3 个乘性操作符: 乘法, 除法和求模.
1, 乘法 (*) 表示计算连个数乘积. 和数学中乘法一样, 要是超出范围, 返回 Infinity 或 - Infinity
2, 除法 (/) 第二个数除以第一个数.
3, 求模 (余数) 由(%)表示.
加性操作符
1, 加法 (+) 都是数值正常加法运算, 如果: 都是字符串, 将两拼接起来. 如一个是数值, 一个是字符串, 将数值转换成字符串, 然后字符串拼接. 如果有一个操作数是对象, 数值或布尔值, 调用 toString()方法. 对于 underfined 和 null 调用 String()函数取得相应的字符串.
* 可以运用括号告诉浏览器那个先执行.
2, 减法 (-) 和加法类似.
关系运算符
大于 (>) 小于 (<) 大于等于 (>=) 小于等于(<=)
比较规则如下:
如都是数值, 执行数值比较.
如两个操作符都是字符串时, 则比较两个字符串对应的字符编码值.
如一个是数值, 则另一个操作数转换成一个数值, 然后执行数值比较.
如一个操作数是对象, 则调用这个对象的 valueOf()方法, 如果对象没有这个方法用 toString()方法, 在根据上面规则比较.
如一个是布尔值, 将其转换成数值在比较.
任何与 NaN 进行比较都是 false.
相等操作符
1, 相等 (==) 如果相等返回 true. 不相等 (!=) 成立返回 true, 转换规则同上, 不同的是 null 和 underfine 相等.
2, 全等 (===), 不全等(!==) 在不转换类型的情况下比较.
条件操作符
说白了就是 if()else{}语句, 也叫三元操作符.
例如: var max =(num1> num2) ? num1 :num2;
就是说如果前面为 true 取 num1 赋给 max,false 取 num2 赋给 max.
赋值操作符
由 (=) 表示, 也就是二元操作符, 就是把右侧的值赋给左边
逗号操作符
在一条语句中执行多个操作,
用于声明多个变量. 例如: var num1 =1,num2=2,num3=3;
用于赋值, 只会返回最后一项. 例如: var num =(5,1,4,8,0);//num 的值为 0.
来源: http://www.bubuko.com/infodetail-2808084.html