数字是用来计算的,比如:乘法 * 、除法 / 、加法 + 、减法 - 等等,所以经常和算术运算符一起。
算术运算符:也叫数学运算符,主要包括加、减、乘、除、取余(求模)等
运算符 |
作用 |
+ |
求和 |
- |
求差 |
* |
求积 |
/ |
求商 |
% |
取模(取余数) |
加法(+):
let a = 5;
let b = 3;
let sum = a + b;
console.log(sum); // 输出:8
减法(-):
let a = 5;
let b = 3;
let difference = a - b;
console.log(difference); // 输出:2
乘法(*):
let a = 5;
let b = 3;
let product = a * b;
console.log(product); // 输出:15
除法(/):
let a = 10;
let b = 2;
let quotient = a / b;
console.log(quotient); // 输出:5
取余(%):
let a = 10;
let b = 3;
let remainder = a % b;
console.log(remainder); // 输出:1,因为10除以3余数为1。
赋值运算符:对变量进行赋值的运算符
“=” 将等号右边的值赋予给左边, 要求左边必须是一个容器
运算符 |
作用 |
+= |
加法赋值 |
-+ |
减法赋值 |
*= |
乘法赋值 |
/= |
除法赋值 |
%= |
取余赋值 |
let a = 10;
let b = 5;
// 加法赋值运算符 +=
a += b; // 这行代码等同于 a = a + b; ,所以 a 的值会变成 15
console.log(a); // 输出:15
// 减法赋值运算符 -=
a -= b; // 这行代码等同于 a = a - b; ,所以 a 的值会变回 10
console.log(a); // 输出:10
// 乘法赋值运算符 *=
a *= b; // 这行代码等同于 a = a * b; ,所以 a 的值会变成 50
console.log(a); // 输出:50
// 除法赋值运算符 /=
a /= b; // 这行代码等同于 a = a / b; ,所以 a 的值会变成 10
console.log(a); // 输出:10
// 取余赋值运算符 %=
a %= b; // 这行代码等同于 a = a % b; ,所以 a 的值会变成 0
console.log(a); // 输出:0
在JavaScript中,自增和自减是特殊的运算符,用于增加或减少变量的值。
例如:
let count = 5;
console.log(++count); // 输出:6,先自增,然后打印
console.log(count); // 输出:6,打印当前的值
let count2 = 5;
console.log(count2++); // 输出:5,先打印,然后自增
console.log(count2); // 输出:6,打印自增后的值
例如:
let count = 5;
console.log(--count); // 输出:4,先自减,然后打印
console.log(count); // 输出:4,打印当前的值
let count2 = 5;
console.log(count2--); // 输出:5,先打印,然后自减
console.log(count2); // 输出:4,打印自减后的值
使用场景:比较两个数据大小、是否相等,根据比较结果返回一个布尔值(true / false)
运算符 |
作用 |
> |
左边是否大于右边 |
< |
左边是否小于右边 |
>= |
左边是否大于或等于右边 |
<= |
左边是否小于或等于右边 |
== |
左右两边值是否相等 |
!= |
左右值不相等 |
let result = 10 > 5; // 检查10是否大于5
console.log(result); // 输出:true
let result = 5 < 10; // 检查5是否小于10
console.log(result); // 输出:true
let result = 10 >= 10; // 检查10是否大于或等于10
console.log(result); // 输出:true
let result = 5 <= 10; // 检查5是否小于或等于10
console.log(result); // 输出:true
let result = '5' == 5; // 检查字符串'5'是否等于数字5,这里会发生类型转换
console.log(result); // 输出:true
let result = '5' != 5; // 检查字符串'5'是否不等于数字5
console.log(result); // 输出:false,因为在==运算符中,字符串和数字可以进行类型转换,所以这里字符串'5'和数字5是相等的,因此不等于运算结果为false。
!== |
左右两边是否不全等 |
=== |
左右两边是否类型和值都相等(重点) |
!==
是一个“不全等”运算符。当使用 !==
进行比较时,如果两个值的类型不同,或者两个值的类型相同但内容不同,那么结果为 true
。也就是说,只有当两个值的类型和内容都完全相同时,结果才为 false
。
例如:
console.log(5 !== '5'); // 输出:true,因为数字5和字符串'5'类型不同
console.log(10 !== 10); // 输出:false,因为数字10和数字10类型和值都相同
与 !==
相对应,===
是一个“全等”运算符。当使用 ===
进行比较时,它会同时检查两个值的类型和内容是否都相同。只有当两个值的类型和内容都完全相同时,结果才为 true
。否则,结果为 false
。
例如:
console.log(5 === '5'); // 输出:false,因为数字5和字符串'5'类型不同
console.log(10 === 10); // 输出:true,因为数字10和数字10类型和值都相同
===
和 !==
?使用 ===
和 !==
的好处是它们可以防止JavaScript的自动类型转换,这在某些情况下可能会导致一些意想不到的问题。特别是在比较涉及到字符串和数字的情况时,使用 ==
可能会导致错误的结果,因为它会尝试将字符串转换为数字进行比较。而 ===
和 !==
不会进行这样的类型转换,因此它们提供了更准确、更可预测的比较结果。
所以,为了确保比较的准确性和避免可能出现的错误,通常推荐在JavaScript中使用 ===
和 !==
运算符。
在JavaScript中,可以使用这些逻辑运算符来操作布尔值,他们分别是&&
(逻辑与)、||
(逻辑或)和!
(逻辑非)。
&&
(逻辑与):当且仅当两个操作数都为 true
时,结果才为 true
。如果其中一个操作数为 false
,结果就为 false
。这就是“一假则假”的原则。console.log(true && true); // 输出:true
console.log(true && false); // 输出:false
console.log(false && true); // 输出:false
console.log(false && false); // 输出:false
||
(逻辑或):只要两个操作数中有一个为 true
,结果就为 true
。只有当两个操作数都为 false
时,结果才为 false
。这就是“一真则真”的原则。console.log(true || true); // 输出:true
console.log(true || false); // 输出:true
console.log(false || true); // 输出:true
console.log(false || false); // 输出:false
!
(逻辑非):逻辑非运算符用于翻转操作数的逻辑状态。如果操作数为 true
,结果就为 false
。如果操作数为 false
,结果就为 true
。这就是“真变假,假变真”的原则。console.log(!true); // 输出:false
console.log(!false); // 输出:true
分支语句。分支语句用于根据某些条件来决定执行哪些代码。简单来说,它们帮助程序在多个选项中选择执行路径。
分支语句:是程序中用于做选择的语句。想象一下,你到了一个交叉路口,你需要根据某些标志或信号来决定往哪个方向走。分支语句在程序中就起到了这样的作用。
if语句用于根据条件执行代码块。它有两种常见形式:if语句和if...else语句。
if语句:
let number = 10;
if (number > 5) {
console.log("数字大于5");
}
上述代码中,如果number
大于5,将输出"数字大于5"。
if...else语句:
let number = 10;
if (number > 5) {
console.log("数字大于5");
} else {
console.log("数字小于等于5");
}
上述代码中,如果number
大于5,将输出"数字大于5",否则输出"数字小于等于5"。
if...else if...else语句
这是一种更灵活的if语句形式,允许在多个条件之间进行判断,执行第一个满足条件的代码块。如果没有条件满足,也可以使用else语句来执行默认的代码块。
let number = 3;
if (number === 1) {
console.log("数字是1");
} else if (number === 2) {
console.log("数字是2");
} else if (number === 3) {
console.log("数字是3");
} else {
console.log("数字不是1、2或3");
}
在上述代码中,根据number的值,逐个判断条件,执行第一个满足条件的代码块。如果number等于1,则输出"数字是1";如果number等于2,则输出"数字是2";如果number等于3,则输出"数字是3"。如果number的值没有匹配任何条件,将执行最后的else语句,输出"数字不是1、2或3"。
三元运算符是一种简洁的if...else语句,它在一行代码中完成条件判断和操作。
示例代码:
let number = 10;
let message = (number > 5) ? "数字大于5" : "数字小于等于5";
console.log(message);
上述代码中,根据number
是否大于5,将相应的消息赋值给message
变量,并输出该消息。
switch语句用于根据表达式的值执行不同的代码块。它可以替代多个if...else语句,使代码更清晰和易读。
示例代码:
let dayOfWeek = 2;
switch (dayOfWeek) {
case 1:
console.log("星期一");
break;
case 2:
console.log("星期二");
break;
default:
console.log("其他星期");
}
上述代码中,根据dayOfWeek
的值,执行相应的case代码块,并输出对应的星期。如果dayOfWeek
的值没有匹配的case,将执行default代码块。
while循环是一种前测试循环,这意味着在执行循环体内的代码块之前,先检查循环条件。如果条件为真,则执行循环体,然后再次检查条件。这个过程会一直重复,直到条件为假时停止循环
let count = 0; // 初始化计数器
while (count < 5) { // 在每次迭代前检查条件
console.log(count); // 打印当前计数器的值
count++; // 计数器递增
}
// 输出: 0, 1, 2, 3, 4
与while循环相比,do...while循环是一种后测试循环。这意味着它会先执行一次循环体内的代码块,然后再检查循环条件。如果条件为真,则再次执行循环体,并重复此过程。如果条件为假,则停止循环。
let count = 0; // 初始化计数器
do {
console.log(count); // 打印当前计数器的值
count++; // 计数器递增
} while (count < 5); // 在每次迭代后检查条件
// 输出: 0, 1, 2, 3, 4
for循环是一种更紧凑和常用的循环结构。它在单个语句中包含了初始化、条件和增量三个部分。
for (let count = 0; count < 5; count++) { // 初始化、条件和增量合并到一个语句中
console.log(count); // 打印当前计数器的值
}
// 输出: 0, 1, 2, 3, 4
初始化:let count = 0
循环条件:count < 5
循环增量:count++
数组就好比是一个容器,可以存放多个相同类型的值,并且这些值都有一个从0开始的编号,这个编号就是索引。我们可以使用这个索引来访问、修改或操作数组中的元素。
使用数组字面量定义:这是最常见且最简洁的方式来定义数组。数组字面量是一个包含一系列元素的列表,每个元素之间由逗号分隔,并包围在方括号([ ])中。
// 1. 语法,使用 [] 来定义一个空数组
// 定义一个空数组,然后赋值给变量 classes
let classes = [];
// 2. 定义非空数组
let classes = ['小明', '小刚', '小红', '小丽', '小米']
通过 [] 定义数组,数据中可以存放真正的数据,如小明、小刚、小红等这些都是数组中的数据,我们这些数据称为数组单元,数组单元之间使用英文逗号分隔。
使用数组存放数据并不是最终目的,真正的目的是能够随时访问数组中的数据。这意味着数组不仅仅是一个存储数据的结构,更重要的是它能够让我们在需要的时候快速获取到数据。
为了达到这个目的,JavaScript为数组中的每一个数据单元都编了号。这些编号被称为索引值或下标。通过索引值,我们可以轻松地访问到数组中的数据单元。
例如,如果我们有一个数组arr,它包含三个元素,那么我们可以通过索引值来访问这些元素:arr[0]、arr[1]和arr[2]。这里的0、1和2就是索引值。
let fruits = ['苹果', '香蕉', '橙子', '葡萄', '西瓜']
// 1. 访问数组
document.write(fruits[0]) // 结果为:苹果
document.write(fruits[2]) // 结果为:橙子
document.write(fruits[4]) // 结果为:西瓜
// 2. 通过索引值重新为数组赋值
document.write(fruits[1]) // 结果为:香蕉
// 重新为索引值为 1 的元素赋值
fruits[1] = '黄香蕉'
document.write(fruits[1]) // 结果为:黄香蕉
var arr = [1, 2, 3, 4, 5];
console.log(arr.length); // 输出:5
var arr = [1, 2, 3, 4, 5];
arr.length = 3;
console.log(arr); // 输出:[1, 2, 3]
arr.length = 5;
console.log(arr); // 输出:[1, 2, 3, undefined, undefined]
var arr = [1, 2, 3, 4];
arr.push(5);
console.log(arr); // 输出:[1, 2, 3, 4, 5]
var arr = [1, 2, 3, 4];
arr.unshift(0);
console.log(arr); // 输出:[0, 1, 2, 3, 4]
var arr = [1, 2, 3, 4];
var lastElement = arr.pop();
console.log(arr); // 输出:[1, 2, 3]
console.log(lastElement); // 输出:4
var arr = [1, 2, 3, 4];
var firstElement = arr.shift();
console.log(arr); // 输出:[2, 3, 4]
console.log(firstElement); // 输出:1
splice
方法可以在任何位置删除元素,它接受两个参数,第一个参数是要开始删除的索引,第二个参数是要删除的元素数量。var arr = [1, 2, 3, 4];
arr.splice(2, 1); // 从索引2开始,删除1个元素
console.log(arr); // 输出:[1, 2, 4]