JS运算符和逻辑分支

52 阅读3分钟

运算符

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.关系运算符的比较规则

  1. 数字和数字比较, 直接比较大小
  2. 数字和字符串比较, 字符串转换为数字后再比较
  3. 字符串和字符串比较, 进行字符的ASCII码值比较
    常见ascll码值:
    a - z 97 ~ 122
    A - Z 65 ~ 90
    0 - 9 48 ~ 57

3-2.关系运算符特殊值

表达式
null == undefinedtrue
'NaN' == NaNfalse
5 == NaNfalse
NaN == NaNfalse
false == 0true
true == 1true
true == 2false
undefined == 0false
null == 0false
'100' == 100true
'100' === 100false
                                            

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=赋值、运算赋值
,多重赋值、数组元素

逻辑分支

程序的三大流程控制

  1. 顺序:从上朝下执行的代码就是顺序
  2. 分支(选择):根据不同的情况,执行对应代码
  3. 循环:重复做一件事情

IF单分支

if条件判断语句的写法:
if (表达式){
  执行语句
}
当括号内的表达式结果成立(为true时),则执行大括号内的语句,否则不执行。

注意:

  1. if后面的()不能省略。
  2. 一条执行语句可以省略{}, 多条时不能省略{}, 建议不管是一条还是多条都写上{}

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的应用场景: 表达式为固定值, 不能判断范围

注意:

  1. 防止穿透 使用break
  2. 恒等于,值和类型要一致