目录
任务描述
本关任务:我们将给出函数mainJs()
的完整代码,要求在函数体内第三句以及第五句中添加适当的括号,实现编程要求里面的要求。
要想完成本关任务,必须熟悉运算符的优先级和结合性,请阅读下面的相关知识。
相关知识
运算符的优先级
JavaScript 中运算符的优先级和数学中运算符的优先级意思相同,优先级高的运算符比优先级低的运算符先计算,例如数学中1+2*3
算式,先计算2*3
,结果再与1相加,所以乘法的优先级高于加法,在 JavaScript 中,不同的优先级也是这个作用。
下面是常见的运算符的优先级:
分类 | 运算符 | 含义 | 结合性 |
---|---|---|---|
1 | ++ | 前后增量 | R |
1 | -- | 前后减量 | R |
1 | ! | 逻辑非 | R |
2 | * / % | 乘 除 求余 | L |
3 | + - | 加减 | L |
4 | < <= > >= | 比较数字顺序 | L |
4 | in | 测试属性是否存在 | L |
5 | == | 判断相等 | L |
5 | != | 判断不等 | L |
6 | & | 按位与 | L |
7 | && | 逻辑与 | L |
8 | ?: | 条件运算符 | R |
9 | = | 赋值 | R |
9 | += -= *= /= %= | 运算且赋值 | R |
10 | , | 忽略第一个操作数 | L |
从上到下优先级逐渐降低。第一栏数字相同的运算符优先级相同,对于这个表格,不需要全部记住,但是常见的需要记住,比如加减乘除的优先级高于比较运算符,赋值运算符的优先级几乎是最低的,下面给出例子帮助理解:
javascript
var a = 1;
var b = 2;
var c = ++a+b;
因为++
的优先级高于+
,所以上面的第三个句子等价于:
var c = (++a)+b;
运算符的结合性
运算符的优先级是针对不同优先级的运算符来说的,对于同一级的运算符,运算顺序取决于运算符的结合性,比如加法和减法的优先级相同,而加法和减法都是从左向右结合,所以a+b-c
式中,会先计算a+b
,即按照阅读的顺序计算。
也有很多运算符是从右到左结合的,比如取反、逻辑非。
上面图中的第三栏就是结合性,R 表示从右向左结合,L 表示从左到右结合,从左向右的占多数,这和我们在数学中的习惯相同。
javascript
var d = a*b/c; // 先计算乘法后计算除法
var aa = 2;
var bb = 3;
var cc = aa *= bb; // 先计算aa*=bb,再把结果赋值给cc,为6
上面第一个式子是从左到右结合,第四个式子是从右到左结合。 分别等价于:
javascript
var d = (a*b)/c;
var cc = (aa *= bb);
编程要求
本关的编程任务是补全右侧代码片段中 Begin 至 Eend 中间的代码,在函数体内第三句以及第五句添加适当的括号,以实现如下功能:
-
参数 a 先减去1,所得差再与参数 b 相加,然后将结果再与 b 相乘;
-
上面的结果为24则给参数 c 赋值1,否则赋值0;
-
计算 c 与 d 的积,这个积再与参数 d 求和,所得结果赋值给参数 e;
-
函数参见下面的测试说明部分。
本关涉及的代码文件Priority.js
的代码框架如下:
javascript
function mainJs(a,b) {
var a = parseInt(a);
var b = parseInt(b);
// 请在此处编写代码
/********** Begin **********/
var c = --a+b*b==24?1:0;
var d = 4;
var e = c*=d+d;
/********** End **********/
return e;
}
答案
javascript
function mainJs(a,b) {
var a = parseInt(a);
var b = parseInt(b);
// 请在此处编写代码
/********** Begin **********/
var c = (--a+b)*b==24?1:0;
var d = 4;
var e = (c*=d)+d;
/********** End **********/
return e;
}