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;
}
相关推荐
Ryan今天学习了吗几秒前
从零开始实现命令式组件ElMessage(附代码)
前端
用户203119660096几秒前
padding和frame在使用中的顺序问题
前端
资深前端外卖员2 分钟前
【nodejs高可用】Nodejs应用安全防范的问题总结
前端·javascript
袁煦丞2 分钟前
高效文件传输工具FastSend:cpolar内网穿透实验室第567个成功挑战
前端·程序员·远程工作
嘻嘻嘻嘻嘻嘻ys6 分钟前
《Spring Boot 3响应式架构实战:R2DBC驱动的高并发数据持久化革命》
前端·后端
滚石_stars7 分钟前
了解 CSS 的 display: inline-flex;
前端
程序员Bears7 分钟前
HTML5 新特性详解:语义化标签、表单与音视频嵌入
前端·html·html5·visual studio code
进取星辰7 分钟前
14、服务端组件:未来魔法预览——React 19 RSC实践
前端·react.js·前端框架
前端大白话13 分钟前
Vue2和Vue3语法糖差异大揭秘:一文读懂,开发不纠结!
javascript·vue.js·设计模式
剽悍一小兔13 分钟前
小程序发布后,不能强更的情况下,怎么通知到用户需要去更新?
前端