一、运算符
算术(数学)运算
支持:加(+)、减(-)、乘(*)、除(/)、求余(%)
值得注意的是,+和-可以放到单个数据的前面,表示正负。
算术运算的表达式一定返回数字,可以利用其特点做类型转换,参考类型的隐式转换
字符串拼接
当+
的两端有一个是字符串时,不再进行算术运算,而变为字符串拼接
表达式一定返回string,可以利用其特点做类型转换,参考类型的隐式转换
赋值运算
涉及的运算符:=
+=
*=
/=
-=
%=
。
其中,a += xxx
,等效于a = a + (xxx)
,其他类似
小贴士 赋值表达式始终返回赋值结果,我们可以利用该特点完成连续赋值
// 将 3 同时赋值给 a、b a = b = 3;
比较运算
涉及的运算符:==
===
!=
!==
>
>=
<
<=
小贴士 在实际开发中,没有任何理由使用
==
和!=
,你可以当做这两个运算符并不存在。 应该始终使用===
和!==
来比较相等和不相等
小贴士 比较运算始终返回boolean,我们可以利用这一点来完成某些赋值
// 啰嗦的代码 if(sex === '男'){ user.isMale = true; } else{ user.isMale = false; } // 简洁优雅的代码 user.isMale = sex === '男'
逻辑运算
逻辑运算会涉及到布尔判定
运算符:!
对后面的数据取反,表达式一定返回boolean。
可以利用其特点做类型转换,参考类型的隐式转换
把数据转换成布尔值
运算符:&&
并且,真真为真,其他为假,具有短路规则。
表达式返回最后一个判定的数据
小贴士 在实际的开发中,我们可以利用短路规则简化代码
// 实现功能,如果exp有值(判定为真),就输出ok // 啰嗦的代码 if(exp){ console.log(exp); } // 简洁的代码 exp && console.log(exp)
运算符:||
或者,假假为假,其他为真,具有短路规则。
表达式返回最后一个判定的数据
小贴士 在实际的开发中,我们可以利用短路规则简化代码
// 实现功能,如果exp有值,就把它的值赋值给n,如果没有值,就给n赋值为默认值 1 // 啰嗦的代码 if(exp){ n = exp; } else{ n = 1; } // 简洁的代码 n = exp || 1;
运算符:? :
,格式a ? b : c
三目运算,判定a,为真时表达式返回b,否则返回c
小贴士 三目运算通常用于替代一些简单的if结构
// 如果exp为真,则把1赋值给n,否则,把2赋值给n // 啰嗦的代码 if(exp){ n = 1; } else{ n = 2; } // 更简洁的代码 n = exp ? 1 : 2;
二、布尔判定
所有需要判断真假的地方都会使用下面的规则
数据 | 判定 |
---|---|
false null undefined 0 NaN '' | false |
剩余所有数据 | true |
三、类型的隐式转换
每个运算符都有自己期望的数据,比如*
期望两端都是数字
一旦数据不符合运算符的期望,js就会悄悄的对数据进行类型转换,把它转换成期望的值后进行运算。
值得注意的是,这种转换是 临时 的,并不会对原数据造成影响
小贴士 在实际的开发中,我们可以利用类型的隐式转换完成以下功能:
var n = +a; // 不管a是啥,都会被转换成数字,保存到n中
var s = a + ''; // 不管a是啥,都会被转换成字符串,保存到s中
var b = !!a; // 不管a是啥,都会被转换成boolean,保存到b中
练习:
/*
编写一个完美的求和函数:
1. 若两个数据都是普通数字,求和即可
2. NaN的数据需要变为0
3. 其他类型的数据需要转换为数字
*/
function sum(a, b) {
// 第一种:
// if (isNaN(a)) {
// a = 0;
// }
// if (isNaN(b)) {
// b = 0;
// }
// console.log(+a + +b);
// 第二种:
// a = isNaN(a) ? 0 : +a;
// b = isNaN(a) ? 0 : +b;
// console.log(a + b);
// 第三种:
a = +a || 0;
b = +b || 0;
console.log(a + b);
}
sum(NaN, "36");
/*
不使用if,判断一个年份是否是闰年,输出是或否
闰年规则:
1. 4年一闰,百年不闰
2. 400年必闰
上述两点满足其一即可
*/
var year = 2000;
//
// ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) && console.log("是");
// (year % 4 !== 0 || (year % 4 === 0 && year % 100 === 0 && year % 400 !== 0)) &&
// console.log("否");
// 三目运算:
var i = (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;
i = i ? "是" : "否";
console.log(i);
// 判断变量year是否是闰年
/*
不使用if
根据身高、体重,计算健康状况
健康状况取决于BMI BMI=体重÷身高的平方。(体重单位:千克;身高单位:米。)
BMI的正常值在20~25之间,少于20偏瘦,高于25偏胖
输出 正常、偏瘦、偏胖
*/
var height = 185, // 身高(厘米)
weight = 100; // 体重(千克)
height = 0.01 * height;
var BMI = weight / (height * height);
// 平方也可以写做height**2
console.log(BMI);
BMI > 25 && console.log("偏胖");
BMI < 20 && console.log("偏瘦");
BMI >= 20 && BMI <= 25 && console.log("正常");
// 三目运算:
// var result = BMI >= 20 && BMI <= 25 ? "正常" : BMI > 25 ? "偏胖" : "偏瘦";
// console.log(result);