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;
}
相关推荐
晓1313几秒前
JavaScript加强篇——第五章 DOM节点(加强)与BOM
java·开发语言·javascript
小咪一会12 分钟前
速学 RocketMQ
学习·rocketmq·java-rocketmq
我是唐青枫17 分钟前
C#.NET serilog 详解
开发语言·c#·.net
三月的一天24 分钟前
在 React Three Fiber 中实现 3D 模型点击扩散波效果
前端·react.js·前端框架
爱敲代码的小冰24 分钟前
npm 切换 node 版本 和npm的源
前端·npm·node.js
DoraBigHead29 分钟前
🧠【彻底读懂 reduce】acc 是谁?我是谁?我们要干嘛?
前端·javascript·面试
future141240 分钟前
项目开发日记
前端·学习·c#·游戏开发
oioihoii1 小时前
C++11中的std::minmax与std::minmax_element:原理解析与实战
java·开发语言·c++
超龄超能程序猿1 小时前
使用 Python 对本地图片进行图像分类
开发语言·人工智能·python·机器学习·分类·数据挖掘·scipy
汪子熙1 小时前
CSS 中 td:last-child a 选择器详解
前端·javascript