JavaScript运算符优先级引起的bug
来源:互联网 发布:西安航海家软件 编辑:程序博客网 时间:2024/05/20 20:56
[下面是昨天发给同事的邮件,为防止泄露商业机密,隐去了项目名和变量名]
====================================================
昨天发现Nx代码中的一个bug,是由于JavaScript运算符优先级问题引起的。
例子:
if (!a instanceof Array)
throw new Error("a should be an array");
......
if (!b instanceof Object)
throw new Error("b should be an object");
原因:! Operator的优先级比instanceof的优先级要高,所以先计算!a, 结果为boolean类型。
而
true instanceof Array;
false instanceof Array;
true instanceof Object;
false instanceof Object;
都会返回false, 这导致所有的检查都不起作用,J
下面摘录的是JavaScript中运算符优先级, 以供参考。
运算符优先级 (JavaScript)
4(共 5)对本文的评价是有帮助 - 评价此主题
运算符优先级描述了在计算表达式时执行运算的顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,先执行相乘,再执行相加。
JavaScript 运算符
下表列出了 JavaScript 运算符,并按优先级顺序从高到低排列。 具有相同优先级的运算符按从左至右的顺序计算。
运算符
说明
. [] ()
字段访问、数组索引、函数调用和表达式分组
++ -- - ~ ! delete new typeof void
一元运算符、返回数据类型、对象创建、未定义的值
* / %
相乘、相除、求余数
+ - +
相加、相减、字符串串联
<< >> >>>
移位
< <= > >= instanceof
小于、小于或等于、大于、大于或等于、是否为特定类的实例
== != === !==
相等、不相等、全等、不全等
&
按位“与”
^
按位“异或”
|
按位“或”
&&
逻辑与
||
逻辑“或”
?:
条件运算
= OP=
赋值、赋值运算(如 += 和 &=)
,
多个计算
圆括号用于改变由运算符优先级确定的计算顺序。 这就是说,先计算完圆括号内的表达式,然后再将它的值用于表达式的其余部分。
来源:http://technet.microsoft.com/zh-cn/library/z3ks45k7
- JavaScript运算符优先级引起的bug
- 运算符优先级引发的bug
- javascript运算符优先级
- JavaScript运算符优先级
- javascript运算符优先级
- 运算符优先级 (JavaScript)
- javascript运算符优先级
- JavaScript运算符优先级
- JavaScript中运算符的优先级
- JavaScript中运算符的优先级
- javascript中的运算符的优先级
- JavaScript中运算符的优先级
- JavaScript中运算符的优先级汇总
- javascript中运算符的优先级问题
- 运算级优先级引发的Bug
- javascript运算符及优先级
- 运算符的优先级
- 运算符的优先级
- 线程处理函数pthread_cleanup_push / pthread_cleanup_pop
- 关于分页,SQLServer中的top、MySql中的limit、Oracle中的rownum的区别?
- linux下C语言多线程(一)线程的创建与取消
- yum 的使用以及注意点
- JS:private variables
- JavaScript运算符优先级引起的bug
- vim 的一些插件
- 线程取消(pthread_cancel)
- HashMap结构,原理
- 开通博客前言
- mapview使用方法
- Eclipse常用快捷键
- Private Methods
- 铁道部12306官网如何体现了互联网思维?