以前很少关注js优先级 主要哦是技术菜鸟老加班没时间技术菜鸟
最重要的是记不住特点。。。。。。。。。。
1级
. [] ()
字段访问、数组索引、函数调用和表达式分组
通过观察可以发现
. 字段访问--》读取数据
[] 数组索引--》读取数据 ps [] 这个也可以创建空数组 不知道为啥没有算进去
() 括号 分为函数调用--》读取作用域
表达式分组
二级
++ -- - ~ ! delete new typeof void
一元运算符、返回数据类型、对象创建、未定义的值
所有一元运算符,如 ~ 运算符,以如下规则来求表达式的值:
用该运算符来生成数字。
~ 运算符查看表达式的二进制表示法的值,并执行按位非操作。该操作的结果如下所示:
0101 (expression)
----
1010 (result)
表达式中的任何一位为 1,则在结果中相应位变为 0。表达式中的任何一位为 0,则在结果中相应位变为 1。
二级优先级里面 大部分是一元操作符 和后缀表达式外加一个new
第三极
* / %
相乘、相除、求余数
第三级 就简单了 乘除求余 元算
第四级别
+ - +
相加、相减、字符串串联
这里加法和减法 我理解 不知道为啥把字符串串联也单独拉出来。。。。。
+运算符作用于两个数字类型的操作数时表示加法,产生两个操作数之和。-运算符表示剑法,产生两个数字之差。
加法是满足交换律的运算,但是不总满足结合律。
加法遵循IEEE 754二进制双精度幅度浮点算法规则:
-运算符作用于两个数字类型时表示减法,产生两个操作数之差。左边操作数是被减数右边是减数。给定操作数a和b,总是有a–b产生与a + ( -b )产生相同结果。
第五级别
<< >> >>>
移位
左移一位相当于该数乘以2,左移2位相当于该数乘以2^2=4。上面举的例子15<< 2=60,即乘了4。但此结论只适用于该数左移时被溢出舍弃的高位中不包含1的情况。
15<< 2=60,即乘了4
8 << 1的值为8*2=16;
8 << 2的值为8*(2^2)=32;
8 << n的值为8*(2^n)。
>>(带符号右移)
右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。
>>>(无符号右移)
第六级别
< <= > >= instanceof
小于、小于或等于、大于、大于或等于、是否为特定类的实例
第七级别
== != === !==
相等、不相等、全等,不全等
比较 x===y,x 和 y 为值,需要产出 true 或 false。比较过程如下:
Type(x)
与 Type(y)
的结果不一致,返回 false,否则 Type(x)
结果为 Undefined,返回 true Type(x)
结果为 Null,返回 true Type(x)
结果为 Number,则
Type(x)
结果为 String,如果 x 与
y 为完全相同的字符序列(相同的长度和相同的字符对应相同的位置),返回 true,否则,返回 false Type(x)
结果为 Boolean,如果 x 与
y 都为 true 或 false,则返回 true,否则,返回 false 此算法与 SameValue
算法在对待有符号的零和 NaN 上表现不同。
还有 几个级别
C++
用 ^ 运算符实现按位异或运算
![]()
expression1^expression2
参与运算两
值
两
相应bit位相同
则结
0
否则
1
即:
0^0 = 0![]()
1^0 = 1![]()
0^1 = 1![]()
1^1 = 0
原文:http://www.cnblogs.com/qqloving/p/3617853.html