一、运算符
1.1 算术运算符
数学运算符也叫算术运算符,主要包括加、减、乘、除、取余(求模)。
+:求和
-:求差
*:求积
/:求商
%:取模(取余数) ,
开发中经常作为某个数字是否被整除
JavaScript中 优先级越高越先被执行,
优先级相同时以书从左向右执行
。
乘、除、取余优先级相同
加、减优先级相同
乘、除、取余优先级大于加、减
使用 () 可以提升优先级
总结: 先乘除后加减,有括号先算括号里面的。
1.2 赋值运算符
赋值运算符:对变量进行赋值的运算符
= 将等号右边的值赋予给左边, 要求左边必须是一个容器
+=
-=
*=
/=
%=
1.3 一元运算符
只需要一个表达式就可以运算的运算符叫一元运算符。例:正负号
二元运算符,例:let num = 10 + 20
自增:
符号:++
作用:让变量的值
+1
自减:
符号:--
作用:让变量的值
-1
自增运算符的用法:
前置自增:
let num = 1
++num
先自加后赋值
后置自增:
let num = 1
num++
先赋值后自加
let i = 1
console.log(i++ + ++i + i)
/*
i = 1
i++为 1,i = 2(先赋值,后自加)
++i为 3,i = 3(先自加,后赋值)
i++ + ++i + i 等价于
1 + 3 + 3
*/
1.4 比较运算符
比较运算符:
>:左边是否大于右边
<:左边是否小于右边
>=:左边是否大于或等于右边
<=:左边是否小于或等于右边
==:左右两边是否相等
===:左右两边是否类型和值都相等
!==:左右两边是否不全等
比较结果为boolean类型,即只会得到true或false
比较运算符的细节
字符串比较,是比较的字符对应的ASCII码
从左往右依次比较
如果第一位一样再比较第二位,以此类推
NaN不等于任何值,包括它本身
尽量不要比较小数,因为小数有精度问题
不同类型之间比较会发生隐式转换
最终把数据隐式转换转成number类型再比较
所以开发中,如果进行准确的比较我们
更喜欢 ===
或者 !==
1.5 逻辑运算符
逻辑运算符用来解决多重条件判断
逻辑运算符里的短路
短路:只存在于 && 和 || 中,当满足一定条件会让右边代码不执行
&& 左边为false就短路 || 左边为true就短路
1.6 运算符优先级
二、语句
2.1 表达式和语句
表达式:表达式是一组代码的集合,JavaScript
解释器会将其计算出一个结果
语句:js 整句或命令,
js
语句是以分号结束(可以省略) 比如: if语句 for 循环语句
区别:
表达式计算出一个值,但语句用来自行以使某件事发生
(
做什么事
)
表达式
3 + 4
语句
alert() 弹出对话框
其实某些情况,也可以把表达式理解为语句,因为它是在计算结果,也是做事
2.2 分支语句
① 程序三大流程控制语句
![](https://i-blog.csdnimg.cn/blog_migrate/9a75140ec5b6fa2dff91e045d4dfb804.png)
②
分支语句
分支语句可以让我们有
选择性
的执行想要的代码
分支语句包含:
If分支语句
三元运算符
switch 语句
if分支语句
if语句有三种使用:单分支、双分支、多分支
单分支使用语法:
if (条件) {
满足条件要执行的代码
}
括号内的条件为true时,进入大括号里执行代码
小括号内的结果若不是布尔类型时,会发生隐式转换转为布尔类型
双分支if语法:
if (条件) {
满足条件要执行的代码
} else {
不满足条件要执行的代码
}
多分支if语法:
if (条件1) {
代码1
} else if (条件2) {
代码2
} else if (条件3) {
代码3
} else {
代码n
}
释义:
先判断条件1,若满足条件1就执行代码1,其他不执行
若不满足则向下判断条件2,满足条件2执行代码2,其他不执行
若依然不满足继续往下判断,依次类推
若以上条件都不满足,执行else里的代码n
注:可以写N个条件,但这里演示只写2个
三元运算符
条件 ? 满足条件执行的代码 : 不满足条件执行的代码
switch语句
switch(数据) {
case 值1:
代码1
break
case 数据2:
代码2
break
case 数据3:
代码3
break
default:
代码n
}
释义:
找到跟小括号里数据全等的case值,并执行里面对应的代码
若没有全等 === 的则执行default里的代码
switch case语句一般用于等值判断,不适合于区间判断
switch case一般需要配合break关键字使用 没有break会造成case穿透
2.3 循环语句
2.3.1 while循环
while (循环条件) {
要重复执行的代码(循环体)
}
释义:
跟if语句很像,都要满足小括号里的条件为true才会进入执行代码
while大括号里代码执行完毕后不会跳出,而是继续回到小括号里判断条件是否满足,若满足又执行大括号里的代码,然后再回到小括号判断条件,直到括号内条件不满足,即跳出
![](https://i-blog.csdnimg.cn/blog_migrate/a4ba2f229e4d8bb0319d354586c58550.png)
2.3.2 循环退出
continue:结束本次循环,继续下次循环
break:跳出所在的循环
2.3.3 for循环
for (声明起始值; 循环条件; 变化值) {
循环体
}
三、数组
数组(Array)是一种可以按顺序保存数据的数据类型
3.1 数组的基本使用
数组(Array)是一种可以按顺序保存多个数据
① 声明语法
let 数组名 = [数据1, 数据2, ..., 数据n]
数组是按顺序保存,所以每个数据都有自己的编号
计算机中的编号从0开始,所以小明的编号为0,小刚编号为1,以此类推
在数组中,数据的编号也叫 索引或下标
数组可以存储任意类型的数据
② 取值语法
数组名[下标]
通过下标取数据
取出来是什么类型的,就根据这种类型特点来访问
③ 一些术语
元素:数组中保存的每个数据都叫数组元素
下标:数组中数据的编号
长度:数组中数据的个数,通过数组的length属性获得
④ 遍历数组
用循环把数组中每个元素都访问到,一般会用for循环遍历
3.2 操作数组
数组增加新的数据
数组.push(新增的内容) 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度
arr.unshift(新增的内容) 方法将一个或多个元素添加到数组的开头,并返回该数组的新长度
数组删除元素
数组. pop() 方法从数组中删除最后一个元素,并返回该元素的值
数组. shift() 方法从数组中删除第一个元素,并返回该元素的值
数组. splice(start, deleteCount) 方法 删除指定元素
解释:
start 起始位置:
指定修改的开始位置(从0计数)
deleteCount:
表示要移除的数组元素的个数
可选的。 如果省略则默认从指定的起始位置删除到最后
补充:splice方法既可以在数组中插入元素,可以在数组中删除元素。
还有第二种用法,插入元素
数组. splice(插入的位置, 0, 插入的元素) 方法 在指定的索引位置插入一个新的元素,第二个参数为删除的位置,如果为 0, 则代表不会删除元素,而是插入元素。
3.3 冒泡排序
// 一共需要 length - 1 趟循环
for (let i = 0; i < arr.length - 1;i++) {
// 每趟循环交换 length - 1 - i 次
for (let j = 0; j < arr.length - i - 1; j++) {
if(arr[j] > arr[j + 1]) {
let temp = arr[j]
arr[j] = arr[j + 1]
arr[j + 1] = temp
}
}
}