目錄
任務描述
相關知識
運算符的優先級
運算符的結合性
編程要求
任務描述
本關任務:我們將給出函數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 |
從上到下優先級逐漸降低。第一欄數字相同的運算符優先級相同,對于這個表格,不需要全部記住,但是常見的需要記住,比如加減乘除的優先級高于比較運算符,賦值運算符的優先級幾乎是最低的,下面給出例子幫助理解:
var a = 1;
var b = 2;
var c = ++a+b;
因為++
的優先級高于+
,所以上面的第三個句子等價于:
var c = (++a)+b;
運算符的結合性
運算符的優先級是針對不同優先級的運算符來說的,對于同一級的運算符,運算順序取決于運算符的結合性,比如加法和減法的優先級相同,而加法和減法都是從左向右結合,所以a+b-c
式中,會先計算a+b
,即按照閱讀的順序計算。
也有很多運算符是從右到左結合的,比如取反、邏輯非。
上面圖中的第三欄就是結合性,R 表示從右向左結合,L 表示從左到右結合,從左向右的占多數,這和我們在數學中的習慣相同。
var d = a*b/c; // 先計算乘法后計算除法
var aa = 2;
var bb = 3;
var cc = aa *= bb; // 先計算aa*=bb,再把結果賦值給cc,為6
上面第一個式子是從左到右結合,第四個式子是從右到左結合。 分別等價于:
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
的代碼框架如下:
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;
}
答案
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;
}