JavaScript——运算符的优先级和结合性

目录

任务描述

相关知识

运算符的优先级

运算符的结合性

编程要求

任务描述

本关任务:我们将给出函数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;
}
相关推荐
2401_858286116 分钟前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
coder_pig21 分钟前
跟🤡杰哥一起学Flutter (三十四、玩转Flutter手势✋)
前端·flutter·harmonyos
万少28 分钟前
01-自然壁纸实战教程-免费开放啦
前端
独立开阀者_FwtCoder30 分钟前
【Augment】 Augment技巧之 Rewrite Prompt(重写提示) 有神奇的魔法
前端·javascript·github
yuki_uix40 分钟前
AI辅助网页设计:从图片到代码的实践探索
前端
我想说一句41 分钟前
事件机制与委托:从冒泡捕获到高效编程的奇妙之旅
前端·javascript
陈随易41 分钟前
MoonBit助力前端开发,加密&性能两不误,斐波那契测试提高3-4倍
前端·后端·程序员
guygg8843 分钟前
基于matlab的FIR滤波器
开发语言·算法·matlab
汤姆Tom1 小时前
JavaScript reduce()函数详解
javascript
小飞悟1 小时前
你以为 React 的事件很简单?错了,它暗藏玄机!
前端·javascript·面试