第4章 操作符
表达式:值和操作符,运算会有一个结果。
同时,表达式中的每个数值及部分表达式,又称为子表达式。
4.1 算术运算
+ - * / %(取余或取模)
4.2 一元运算符
一元运算符:只有一个操作数的运算符,一元运算会直接修改原始变量的数据。
++ – ! 包含三个运算符
二元运算:两个操作的运算符,如:5 + 6
规则
前置++(–):先加(减)后使用;
后置++(–):先使用后加(减);
var a = 1;
var b = ++a + ++a;
console.log(b); //5
var a = 1;
var b = a++ + ++a;
console.log(b);//4
var a = 1;
var b = a++ + a++;
// console.log(b); // 3
var a = 1;
var b = ++a + a++;
console.log(b);//4
4.3 逻辑运算符
- && 与 左边为真,则取右边;左边为假,则取左边
- || 或 左边为真,则取左边;左边为假,则取右边
- ! 非 取反
var a = 1;
var b = 2;
var c = 0;
console.log(a || b); //1
console.log(b || a); //2
console.log(c && a); //0
console.log(a || c && b); //1
// JS逻辑运算中的逻辑或和逻辑与的运算结果:
// 决定整个表达式的子表达式的值
4.4 关系运算符
< >
<= >=
== !=
=== !==
与=的区别:==只进行值比较,===类型和值都相等时,则相等
var result = '55' == 55; // true
var result = '55' === 55; // false 值相等,类型不相等
var result = 55 === 55; // true
4.5 赋值运算符
注意与数学符号的差别:
= += -= *= /= %=
var num = 0;
num+=5; //相当于, num = num + 5;
4.6 运算符优先级
JavaScript 运算符优先级,是描述在计算机运算计算表达式时执行运算的先后顺序。 先执行具有较高优先级的运算,然后执行较低优先级的运算。 例如,我们常说的先执行相乘和除,再执行加减运算
优先级 | 运算符 | 说明 | 结合性 |
---|---|---|---|
1 | []、.、() | 字段访问、数组索引、函数调用和表达式分组 | 从左向右 |
2 | ++ – -~!delete new typeof void | 一元运算符、返回数据类型、对象创建、未定义的值 | 从右向左 |
3 | *、/、% | 相乘、相除、求余数 | 从左向右 |
4 | +、- | 相加、相减、字符串串联 | 从左向右 |
5 | <<、>>、>>> | 左位移、右位移、无符号右移 | 从左向右 |
6 | <、<=、>、>=、instanceof | 小于、小于或等于、大于、大于或等于、是否为特定类的实例 | 从左向右 |
7 | ==、!=、===、!== | 相等、不相等、全等,不全等 | 从左向右 |
8 | & | 按位“与” | 从左向右 |
9 | ^ | 按位“异或” | 从左向右 |
10 | | | 按位“或” | 从左向右 |
11 | && | 短路与(逻辑“与”) | 从左向右 |
12 | || | 短路或(逻辑“或”) | 从左向右 |
13 | ? : | 条件运算符 | 从右向左 |
14 | =、+=、-=、*=、/=、%=、&=、 | =、^=、<、<=、>、>=、>>= | 混合赋值运算符 |
15 | , | 多个计算 | 按优先级计算,然后从右向左 |
优先级从高到底
1. () 优先级最高
2. 一元运算符 ++ -- !
3. 算数运算符 先* / % 后 + -
4. 关系运算符 > >= < <=
5. 相等运算符 == != === !==
6. 逻辑运算符 先&& 后||
7. 赋值运算符
4.7 案例分析
更新于2020.07.26
案例1:入职薪水10K,每年涨幅入职薪水的5%,50年后工资多少?
/*
第一年:10000 n-1 = 0
第二年:10000(1+0.05); n-1 = 1
第三年:10000(1+0.05) + 10000(1+0.05)*0.05 = 10000(1+0.05)^2; n-1 = 2
……
第n年:10000(1+0.05)^(n-1); n-1 = 49
*/
var salary = 10000;
//50年后,小明的工资是:109213.33129289238
console.log(`50年后,小明的工资是:${10000 * Math.pow(1 + 0.05, 50 - 1)}`);
案例2:为抵抗洪水,战士连续作战89小时,编程计算共多少天零多少小时?
var time = 89;
var hour = time % 24;
var day = Math.floor(89 / 24);
console.log(`战士们一共工作了${day}天${hour}个小时`); //战士们一共工作了3天17时
案例3 小明要到美国旅游,可是那里的温度是以华氏度为单位记录的。
/*
它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。
提示:摄氏度与华氏度的转换公式为:摄氏度 = 5/9.0*(华氏度-32)
*/
var Fahrenheit = 80;
var centigrade = (5 / 9.0) * (Fahrenheit - 32);
console.log(`美国当前的温度是:${centigrade}℃`); // 美国当前的温度是:26.666666666666668℃
案例4:给定一个三位数,分别把这个数字的百位、十位、个位算出来并显示。
var num = 478;
var hundred = parseInt(num / 100) % 10; //取得百位,求余后得百位
var decade = parseInt((num / 10) % 10); //取得百位和十位,求余后得十位
var single = num % 10; //取得三位数,求余后得个位
// 这个三位数的百位是:4,十位是:7,个位是:8
console.log(
`这个三位数的百位是:${hundred},十位是:${decade},个位是:${single}`
);
var num = 478;
function showPosition(num) {
// 判定输入num是否是数字
if (typeof num == undefined && typeof num != 'number') return;
// 将数字转为字符串,计算循环次数
let len = (num + '').length;
// 定义一个空数组,用于存放多位数的每位数字
let arr = [];
for (let i = len; i > 0; i--) {
// 依次获取多位数的最高位,次高位,……个位。
arr.push(parseInt(num / Math.pow(10, i - 1) % 10));
}
return arr;
}
console.log(showPosition(num));
总结:
操作符的使用,基本数学运算,一元运算符自增自减及前置后置的区别,逻辑运算符及取值,关系比较运算符,赋值运算符,运算符优先级;