021 赋值运算符
=
:赋值,将右侧的值赋给左边的变量
+=
:a += 5
相当于 a = a + 5
;+=
是整体,不能拆开
更多:-=, *=, /=, %=
022 关系运算符
通过关系运算符可以得知大小关系;关系运算符的表达式的值为 true 或 false
>
大于
>=
大于等于
<
小于
<=
小于等于
非数值与数值的比较,会先转换为数值再比较;任何值和 NaN 的关系运算都是 false
两个字符串的比较,不会转换数值,而是一位一位比较字符串的 Unicode 编码,即按照字典序;由于中文在 Unicode 是按照康熙字典排序,所以比较中文字符串没有什么用途
比较字符串型的数字要先转成数字,否则按字典序比较,产生不可预期的结果
023 Unicode 编码表
Unicode 编码表是十六进制
字符串中输出编码:\u
+四位编码,如 \u2673
;这里是十六进制
网页中:♳
注意这里是十进制
024 相等运算符
相等运算符属于关系运算符,相等返回 true,否则返回 false
注意:单个等号是赋值,不是等于
==
(相等):双等号有自动类型转换
undefined 衍生自 null,undefined == null
为 true;null 和任何数不相等
NaN 不和任何值相等,包括本身;判断 NaN 需要通过 isNaN() 函数
!=
(不相等):不等于;也有自动类型转换
===
(全等):没有自动类型转换;类型不同直接返回 false;null === undefined
为 false
!==
(不全等):对应的不等于
025 条件运算符
三元运算符:condition ? expression1 : expression2
当 condition 为 true 时,执行 expression 1;condition 为 false 时,执行 expression 2
let a = 30;
let b = 40;
let max = a > b ? a : b; // 返回a与b最大值
026 运算符优先级
逗号 ,
也是运算符,其优先级最低
使用 ,
可以分割多个语句,一般用于声明多个变量
应用场景:
let a = 0, b = 1; // 声明多个变量
for (; a < 10; a++, b--); // 用于for循环的条件
总是可以用括号 ()
改变优先级
027 代码块
语句 statement
程序是由语句构成的、
alert('hello');
console.log('hello');
document.write('hello');
可以用大括号 {}
将多个语句归为一组语句;一对大括号中的部分称为代码块,代码块后不需要写分号
let 赋值的作用域仅在代码块内,而 var 赋值的作用域包括代码块的外部
028-029 if 语句
流程控制语句:通过流程控制语句可以控制程序执行流程,使程序根据一定条件来选择执行
语句分类:条件判断语句,条件分支语句,循环语句
if 语句
if (condition)
expression
如果 condition 为 true,则执行 expression;如果 condition 为 false 则不执行
注意:if 语句只控制后面的一条语句,如果要执行多条语句需要将其放入代码块中;开发中建议任何情况下都使用代码块
let a = 10;
if (a > 10) {
alert("a > 10");
}
可以在 condition 中使用 !, &&, ||
等逻辑运算符,来判断多个条件
if-else 语句
if (condition) {
expression1
} else {
expression2
}
如果 condition 为 true,则执行 if 后语句;如果 condition 为 false,则执行 else 后语句
let a = 10;
if (a > 10) {
alert("a > 10");
} else {
alert("a <= 10");
}
if-else 嵌套结构
if (condition1) {
expression1
} else if (condition2) {
expression2
} else {
expression3
}
if-else 嵌套结构可以嵌套任意层,不过只会有一处代码块被执行,所以需要注意条件的顺序
let a = 10;
if (a > 10) {
alert("a > 10");
} else if (a == 10){
alert("a == 10");
} else {
alert("a < 10");
}
030-032 if 练习
题目一:从键盘输入小明的期末成绩,当成绩为 100 输出 "奖励BMW",当成绩在 80~99 输出 "奖励iPhone15s",当成绩在 60~79 输出 "奖励参考书",其他则输出 "没有奖励"。
// prompt: 弹出输入框,返回输入的字符串
let grade = parseInt(prompt("请输入小明的期末成绩(0~100)", "0"));
if (grade > 100 || grade < 0 || isNaN(grade)) {
alert("非法数据");
} else if (grade == 100) {
alert("奖励BMW");
} else if (grade >= 80 && grade <= 99) {
alert("奖励iPhone15s");
} else if (grade >= 60 && grade <= 79) {
alert("奖励参考书");
} else {
alert("没有奖励");
}
题目二:女方家长嫁女儿的条件:高——180cm以上,富——1000万以上,帅——500以上;如果同时满足则输出 "一定要嫁";如果三个条件有为真的情况则输出 "比上不足比下有余";如果都不满足则输出 "不嫁"。
let height = parseInt(prompt("请输入身高(cm)", "0"));
let wealth = parseInt(prompt("请输入财富(万)", "0"));
let handsome = parseInt(prompt("请输入颜值(px)", "0"));
// NaN 都不满足,可以不用检测
if (height > 180 && wealth > 1000 && face > 500) {
alert("一定要嫁");
} else if (height > 180 || wealth > 1000 || face > 500) {
alert("比上不足比下有余");
} else {
alert("不嫁");
}
题目三:编写程序,键盘输入三个数 num1, num2 和 num3,将它们按照从小到大顺序输出。
// 加号可以强制将String转为Number
let num1 = +prompt("请输入第一个数", "0");
let num2 = +prompt("请输入第二个数", "0");
let num3 = +prompt("请输入第三个数", "0");
if (num1 <= num2 && num1 <= num3) {
if (num2 <= num3) {
alert(num1 + ", " + num2 + ", " + num3);
} else {
alert(num1 + ", " + num3 + ", " + num2);
}
} else if (num2 <= num1 && num3 <= num1) {
if (num1 <= num3) {
alert(num2 + ", " + num1 + ", " + num3);
} else {
alert(num2 + ", " + num3 + ", " + num1);
}
} else {
if (num1 <= num2) {
alert(num3 + ", " + num1 + ", " + num2);
} else {
alert(num3 + ", " + num2 + ", " + num1);
}
}
033 条件分支语句 switch
如果分支很多,全用 if-else 会使代码很麻烦,这时就可以用 switch 语句
switch(条件表达式) {
case 表达式:
语句...
break;
case 表达式:
语句...
break;
...
default:
语句...
break;
}
switch 语句在执行时会依次将 case 后的表达式与 switch 的条件表达式进行全等比较,如果比较结果为 true,则从这个 case 后面开始执行;都为 false 则执行 default
例:根据 num 的值输出对应中文
switch(num) {
case 1:
console.log("壹");
break;
case 2:
console.log("贰");
break;
case 3:
console.log("叁");
break;
default:
console.log("〇");
break;
}
注意:使用 break 退出 switch 语句;如果没有 break 语句,则会继续执行后面的代码
switch 和 if 的功能有重复,使用时可以根据使用习惯来调整
034 switch 练习
题目:对于成绩大于 60 分的,输出 "合格",否则输出 "不合格"
注意:case 60:case 61:case 62:case 63:case 64:case 65:case 66:case 67:case 68:case 69:case 70:case 71:case 72:case 73:case 74:case 75:case 76:case 77:case 78:case 79:case 80:case 81:case 82:case 83:case 84:case 85:case 86:case 87:case 88:case 89:case 90:case 91:case 92:case 93:case 94:case 95:case 96:case 97:case 98:case 99:case 100:
的写法也能实现功能,但没人会这么干
let score = 60;
switch (parseInt(score/10)) {
case 6:
case 7:
case 8:
case 9:
case 10:
console.log("合格");
break;
default:
console.log("不合格");
break;
}
另一种写法(这和 if-else 一样了)
switch (true) {
case score >= 60:
console.log("合格");
break;
default:
console.log("不合格");
break;
}
035 while循环
循环语句:通过循环反复执行多次代码
创建循环的三个步骤:1. 初始化变量;2. 在循环中设置条件表达式;3. 定义一个更新表达式,用于更新初始化的变量
while 循环
while (条件表达式) {
语句...
}
while 语句执行时,先对条件表达式进行求值判断,如果值为 true,则执行循环体;执行完毕后继续对表达式进行判断,如果值为 true,则继续执行;如果为 false,则跳出循环
将条件表达式写死为 true 的循环为死循环
可以用 break 跳出循环
let n = 0;
while (n < 10) {
document.write(n++ + "<br />");
}
do-while 循环
do {
语句...
} while(条件表达式);
do-while 先执行循环体,执行后再对条件表达式进行判断
与 while 类似,区别在于 while 先判断再执行,do-while 先执行再判断
do-while 保证循环体至少执行一次
let n = 0;
do {
document.write(n++ + "<br />");
} while (n < 10);
036 while练习
题目:假如投资的年利率为5%,试求从1000块增长到5000块需要花费多少年
let money = 1000; // 表示钱数的变量
let year = 0; // 计数器
while (money < 5000) {
money *= 1.05;
year++;
}
console.log(year);
030 章节中的输入也可以修改,修改为
let grade;
while (true) {
grade = +prompt("请输入小明的期末成绩(0~100)", "0");
if (grade >= 0 && grade <= 100) {
break;
}
alert("非法数据");
}
037 for循环
for (初始化表达式; 条件表达式; 更新表达式) {
语句...
}
执行流程:
- 执行初始化表达式,初始化变量(只执行一次)
- 执行条件表达式,判断是否执行(true 则执行循环,false 则终止)
- 循环体执行后执行更新表达式,重复 2, 3 步
for (let i = 0; i < 10; i++) {
alert(i);
}
for 循环与 while 循环并无明显区别
for 循环的三个表达式都可以省略(分号不能省略),也可以写在外部;for(;;)
为死循环
038 for循环练习
题目1:打印 1-100 之间所有奇数之和
let sum = 0;
for (let i = 1; i <= 100; i += 2) {
sum += i;
}
console.log("1-100之间所有奇数之和为" + sum);
题目2:打印 1-100 之间所有 7 的倍数的个数及总和
let sum = 0, count = 0;
for (let i = 7; i <= 100; i += 7) {
sum += i;
count++;
}
console.log("1-100之间7的倍数的个数为" + count + ",总和为" + sum);
题目3:水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于本身(例:),请打印所有水仙花数。
for (let i = 100; i < 1000; i++) {
let hundreds = parseInt(i / 100);
let tens = parseInt(i / 10) % 10;
let ones = i % 10;
if (i == hundreds*hundreds*hundreds + tens*tens*tens + ones*ones*ones) {
console.log(i);
}
}
039-040 质数练习
练习4:判断一个数是否为质数
let num;
while (true) {
num = parseInt(prompt("请输入一个大于1的整数", "2"));
if (num > 1) {
break;
}
alert("非法输入");
}
let flag = true;
let limit = Math.sqrt(num); // 数学可以证明,只要一个数不能整除小于等于其平方根的质数,它就是质数
for (let i = 2; i <= limit; i++) {
if (num % i == 0) {
flag = false;
break;
}
}
alert(num + (flag ? "是质数" : "不是质数"));