JavaScript入门经典(第7版)
上QQ阅读APP看书,第一时间看更新

2.4 操作符

如果不能通过计算操作变量中保存的值,那么这些值的用处就不是很大。

2.4.1 算术操作符

首先,JavaScript可以使用标准的算术操作符进行加、减、乘和除运算:

var theSum = 4 + 3;

显然,前面这条语句执行之后,变量theSum的值是7。在运算中,我们还可以使用变量名称:

var productCount = 2;
var subtotal = 14.98;
var shipping = 2.75;
var total = subtotal + shipping;

JavaScript的减法(-)、乘法(*)和除法(/)也是类似的:

subtotal = total - shipping;
var salesTax = total * 0.15;
var productPrice = subtotal / productCount;

如果想计算除法的余数,可以使用JavaScript的模除运算符,也就是“%”:

var itemsPerBox = 12;
var itemsToBeBoxed = 40;
var itemsInLastBox = itemsToBeBoxed % itemsPerBox;

上述语句运行之后,变量itemsInLastBox的值是4。

JavaScript对变量值的自增和自减有快捷操作符,分别是(++)和(- -):

productCount++;

上述语句相当于:

productCount = productCount + 1;

类似地,

items--;

与下面的语句作用相同:

items = items -1;

提示:组合操作符

如果变量值的自增或自减不是1,而是其他数值,JavaScript还允许把算术操作符与等号结合使用,比如+=和-=。

如下面两行代码的效果是相同的:

total = total + 5;
total += 5;

下面两行也是一样:

counter = counter - step;
counter -= step;

乘法和除法算术操作符也可以这样使用:

price = price * uplift;
price *= uplift;

2.4.2 操作符优先级

在一个计算中使用多个操作符时,JavaScript根据“优先级规则”来确定计算的顺序,比如下面这条语句:

var average = a + b + c / 3;

根据变量的名称,这应该是在计算平均数,但这个语句不会得到我们想要的结果。在与a和b相加之前,c会先进行除法运算。为了正确地计算平均数,需要添加一对括号,像下面这样:

var average = (a + b + c) / 3;

如果对于运算优先级不是十分确定,我建议使用括号。这样做并不需要什么额外的代价,不仅能够让代码更易读(无论是对编写者本人还是对需要查看代码的其他人),还能避免优先级影响到运算过程。

说明:优先级规则

对于有PHP或Java编程经验的读者来说,将会发现JavaScript的操作符优先级规则与这两种语言基本是一样的。

2.4.3 对字符串使用操作符“+”

当变量保存的是字符串而不是数值时,算术操作符基本上就没有什么意义了,唯一可用的是操作符“+”。JavaScript把它用于两个或多个字符串的连接(按照顺序组合):

var firstname = "John";
var surname = "Doe";
var fullname = firstname + " " + surname;
//变量fullname里的值是"John Doe"

如果把操作符“+”用于一个字符串变量和一个数值变量,JavaScript会把数值转换为字符串,再把两个字符串连接起来:

var name = "David";
var age = 45;
alert(name + age);

图2.2所示的是对一个字符串变量和一个数值变量使用操作符“+”的结果。

图2.2 连接一个字符串和一个数值

本书的第7章将会更详细地讨论JavaScript的数据类型和字符串操作。


实践

把摄氏度转换为华氏度
把摄氏度转换为华氏度的方法是把数值乘9,除以5,然后加32。用JavaScript可以这样做:
var cTemp = 100;  //摄氏度
// 在表达式里充分使用括号
var hTemp = ((cTemp * 9)/5) + 32;

实际上,我们可以省略代码里的括号,结果也是正确的:

var hTemp = cTemp * 9/5 + 32;

不过,使用括号可以让代码更易懂,而且有助于避免操作符优先级可能导致的错误。

让我们在Web页面里测试上述代码,如程序清单2.2所示。


程序清单2.2 通过华氏温度计算摄氏温度

<!DOCTYPE html>
<html>
<head>
    <title>Fahrenheit From Celsius</title>
</head>
<body>
    <script>
        var cTemp = 100; //摄氏温度
        //使用括号
        var hTemp = ((cTemp * 9) /5 ) + 32;
        document.write("Temperature in Celsius: " + cTemp + " degrees<br/>");
        document.write("Temperature in Fahrenheit: " + hTemp + " degrees");
    </script>
</body>
</html>

把这段代码保存到文件temperature.html中,加载到浏览器,应该能够看到如图2.3所示的结果。

图2.3 程序清单2.2的输出

编辑代码文件,给cTemp设置不同的值,每次都应该能够得到正确的结果。