
2.3.2 操作优先级
表2-1展示在JavaScript中使用的5个算术操作符的例子。
表2-1 算术操作符
但是在理解这些基本操作之外,还需要理解更多的知识来完成这些算术操作。计算机遵循与计算器相同的计算规则,并且按照特定的次序执行这些操作。我们把这些规则称为操作优先级或操作次序。程序员必须理解这些规则,据此编写适当的代码,否则后果可能是灾难性的。例如,假定你要计算一个商品的折扣,然后加上运费,例2.8说明可能发生的事情。
例2.8 当忽略了规则时 假定一个客户想要买一件毛衣,原价$100.00,优惠$30.00。店主想要清空存货,因此决定提供额外的40%折扣。这样,$100.00的商品优惠$30.00后的费用是$70.00,再优惠40%的费用是$70.00减去$70.00的40%或者是$70.00的60%。数学上,这个计算可以表示成:
当程序运行或者把这个公式录入计算器时,这件毛衣按$30.00售卖。然而,$70.00的60%实际上是%42.00。在忽略控制操作次序的运算规则情况下,店主将损失很多钱!为什么?
上面的语句漏掉一对圆括号。假如程序员改为以下代码:
其结果将是准确的。
算术操作的下列规则指定算术操作符的执行次序(也就是操作优先级):
1)执行圆括号中的运算(从里到外,如果在圆括号里又有圆括号)。
2)执行乘、除和模运算(从左到右,如果有多个)。
3)执行加和减运算(从左到右,如果有多个)。
除非指定不同的东西,否则计算机将把这个操作优先级应用于程序中的任何数学表达式。编写数学表达式的最好方法是用圆括号括起来你想要一起计算的表达式部分。在不需要的地方使用一对圆括号不会使表达式出错,但是忽略必须包含的圆括号将会使程序得出不正确的结果。例2.9和例2.10说明圆括号的使用与否将引起程序结果的很大不同,即使只是解决一个最简单的数学问题。
例2.9 使用操作优先级 给定以下算术表达式:6+8/2*4,
a)不使用圆括号求值:
b)使用圆括号求值:
c)使用不同的圆括号求值:
d)使用两对圆括号求值:
很明显,圆括号的不同使用会产生不同的结果!
例2.10 再次使用操作优先级 给定以下算术表达式:20%3+5*4-3,
a)不使用圆括号求值:
b)使用圆括号求值:
c)使用三对圆括号求值: