运算符
1.算数运算符
+ 加法
- 减法
* 乘法
/ 除法
% 取余
可用%来求取值范围
Math.random() 生成0~1之间的值,包含0,不包含1
例
% 5 的范围 0~4
%10 的范围是 0~9
%100 的范围是 0~99
console.log(parseInt(Math.random() * 100) % 5);
2.逻辑运算符
| 运算符 | 名称 | 说明 |
|---|---|---|
| && | 与(短路与) | 表达式都为真时才为真(true),否则为假(false) 只找真(true),找到真(true)就不往后面执行 |
| || | 或(短路或) | 表达式只要有一个为真则为真 (true),否则为假(false) 只找假(false),找到假(false)就不往后面执行 |
| ! | 非 | 表达式为真,返回假(false)。表达式为假,返回真(true) |
3.关系运算符
| 运算符 | 名称 | 说明 |
|---|---|---|
| > | 大于 | 如果左边的值大于右边的值则为真,否则为假 |
| < | 小于 | 如果左边的值小于右边的值则为真,否则为假 |
| >= | 大于等于 | 如果左边的值大于等于右边的值则为真,否则为假 |
| <= | 小于等于 | 如果左边的值小于等于右边的值则为真,否则为假 |
| == | 等于 | 如果左边的值等于右边的值则为真,否则为假(只比较值) |
| != | 不等于 | 如果左边的值不等于右边的值则为真,否则为假(只比较值) |
| === | 全等(恒等) | 如果左边的值与类型等于右边的值与类型则为真,否则为假(比较值和类型) |
| !== | 不全等(不恒等) | 如果左边的值与类型只要有一种和右边的值与类型不相等则为真,否则为假(比较值和类型) |
3-1.关系运算符的比较规则
- 数字和数字比较, 直接比较大小
- 数字和字符串比较, 字符串转换为数字后再比较
- 字符串和字符串比较, 进行字符的ASCII码值比较
常见ascll码值:
a - z 97 ~ 122
A - Z 65 ~ 90
0 - 9 48 ~ 57
3-2.关系运算符特殊值
| 表达式 | 值 |
|---|---|
| null == undefined | true |
| 'NaN' == NaN | false |
| 5 == NaN | false |
| NaN == NaN | false |
| false == 0 | true |
| true == 1 | true |
| true == 2 | false |
| undefined == 0 | false |
| null == 0 | false |
| '100' == 100 | true |
| '100' === 100 | false |
4.一元运算符
++ (前置) 自增 先取值,后运算
-- (前置) 自减 先取值,后运算
++ (后置) 自增 先运算,后赋值
-- (后置) 自减 先运算,后赋值
var i = 12;
var sum = i++ + ++i + ++i * 2 + i-- + i--;
console.log(sum + " " + i);// 85 13
5.三目运算符
表达式 ? 条件1:条件2
//判断一个数是偶数还是奇数
var num = parseInt(Math.random() * 10);
console.log(num % 2 ? num + " 是一个奇数" : num + " 是一个偶数");
6.赋值运算符
赋值运算符用等于号(=)表示,就是把右边的值赋给左边的变量。
复合赋值运算符有:
+= -= *= /= %=var a=2,b=7; a+=b;//等价于a=a+b;
7.位移运算符
<< 左位移
>> 右位移
>>> 无符号右位移
8.拼接运算符
+ 左右两边,有一边出现字符,就是拼接
js运算符优先级
| 运算符 | 描述 |
|---|---|
| . [] () | 对象成员存取、数组下标、函数调用等 |
| ++ -- ~ ! delete new typeof void | 一元运算符 |
| * / % | 乘法、除法、去模 |
| + - + | 加法、减法、字符串连接 |
| << >> >>> | 移位 |
| < <= > >= instanceof | 关系比较、检测类实例 |
| == != === !== | 恒等(全等) |
| & | 位与 |
| 位异或 | |
| | | 位或 |
| && | 逻辑与 |
| || | 逻辑或 |
| ?: | 三元条件 |
| = x= | 赋值、运算赋值 |
| , | 多重赋值、数组元素 |
逻辑分支
程序的三大流程控制
- 顺序:从上朝下执行的代码就是顺序
- 分支(选择):根据不同的情况,执行对应代码
- 循环:重复做一件事情
IF单分支
if条件判断语句的写法:
if (表达式){
执行语句
}
当括号内的表达式结果成立(为true时),则执行大括号内的语句,否则不执行。
注意:
- if后面的()不能省略。
- 一条执行语句可以省略{}, 多条时不能省略{}, 建议不管是一条还是多条都写上{}
IF双分支语句
if双分支语句的写法:
if(表达式){
执行语句1
}
else{
执行语句2
}
当if括号内的表达式结果成立,进入执行语句1,否则进入执行语句2;
IF多分支语句
if多分支语句的写法:
if(表达式){
执行语句1
}
else if(表达式2){
执行语句2
}
else if(表达式3){
执行语句3
}
else{
执行语句n
}
从上往下,满足哪个条件就执行其相对应的语句,都不满足时,执行最后的else的语句,只能进入其中之一。
IF的嵌套
将整个if语句块插入另一个if语句块中
if (表达式1) {
if (表达式2) {
if (表达式3){
语句;
} else{
语句;
}
} else{
语句;
}
}
注意: 嵌套if时, 内层的每一对if-else代码要缩进且对齐;编写代码时,else要与最近的if配对。
Switch
Switch语句的写法:
switch(表达式) {
case 常量1: 语句; break;
case 常量2: 语句; break;
…
case 常量n: 语句; break;
default:语句; break;
}
表达式的结果等于哪个case的常量,则执行其后的语句,执行完break就跳出switch结构,都不满足则执行default的语句。
break的作用:是跳出switch结构,如果没有break,则继续执行下面分支的的语句(而不进行判断)。
switch的应用场景: 表达式为固定值, 不能判断范围
注意:
- 防止穿透 使用break
- 恒等于,值和类型要一致