【学习笔记】JavaScript基础 021-040

021 赋值运算符

=:赋值,将右侧的值赋给左边的变量
+=a += 5 相当于 a = a + 5+= 是整体,不能拆开
更多:-=, *=, /=, %=

022 关系运算符

通过关系运算符可以得知大小关系;关系运算符的表达式的值为 true 或 false
> 大于
>= 大于等于
< 小于
<= 小于等于
非数值与数值的比较,会先转换为数值再比较;任何值和 NaN 的关系运算都是 false
两个字符串的比较,不会转换数值,而是一位一位比较字符串的 Unicode 编码,即按照字典序;由于中文在 Unicode 是按照康熙字典排序,所以比较中文字符串没有什么用途
比较字符串型的数字要先转成数字,否则按字典序比较,产生不可预期的结果

023 Unicode 编码表

Unicode 编码表是十六进制
字符串中输出编码:\u +四位编码,如 \u2673;这里是十六进制
网页中:&#9843; 注意这里是十进制

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 结构

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-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");
}
if-else 嵌套结构

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 />");
}
while 循环

do-while 循环

do {
    语句...
} while(条件表达式);

do-while 先执行循环体,执行后再对条件表达式进行判断
与 while 类似,区别在于 while 先判断再执行,do-while 先执行再判断
do-while 保证循环体至少执行一次

let n = 0;
do {
    document.write(n++ + "<br />");
} while (n < 10);
do-while 循环

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 (初始化表达式; 条件表达式; 更新表达式) {
    语句...
}

执行流程:

  1. 执行初始化表达式,初始化变量(只执行一次)
  2. 执行条件表达式,判断是否执行(true 则执行循环,false 则终止)
  3. 循环体执行后执行更新表达式,重复 2, 3 步
for (let i = 0; i < 10; i++) {
    alert(i);
}

for 循环与 while 循环并无明显区别
for 循环的三个表达式都可以省略(分号不能省略),也可以写在外部;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 次幂之和等于本身(例:1^3+5^3+3^3=153),请打印所有水仙花数。

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 ? "是质数" : "不是质数"));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容