1.比较运算符
// 比较运算符,又称关系运算符,返回结果为布尔类型:
> 大于
< 小于
>=
<=
== 判断值是否相等:如果两边的类型不一样,会转换为数值再进行比较
=== 判断类型是否相等:如果两边的类型不一样,会直接比较类型是否相等
!= 不等号:两边的数值是否不相等
!== 两边的类型是都不相等;字符串中的比较运算符,会根据ASCII码进行比较
NaN 不能和任何数相比较,不建议用小数进行比较,小数 有精度问题
// >大于 <小于 ==等于 >=大于等于 <=小于等于 !=不等于
console.log(10 > '5'); // true,数值与字符串相比较时,根据隐式转换,字符串会转换为数值,与数值相比较
console.log(15 == 10); // false
console.log(15 != 10); // true
// ===类型与数值绝对相等 !==类型不相等
console.log(15 === 15); // true
console.log(15 !== '15'); //true
/*
1.求相等的比较运算符,返回结果均为boolean类型
2.在字符串的比较中,计算机会比较字符编码,从首位字符开始比较,越往后的数值级别越高
*/
console.log('aj' > 'az'); // false
console.log('3' > '20'); // true
2.逻辑运算符
// &&与 ||或 !非
// &&
console.log(true && true); // true
console.log(true && false); // false
console.log(false && false); // false
// ||
console.log(true || false); // true
console.log(true || true); // true
console.log(false || false); //false
// ! 非真即假,非假即真
console.log(!true); // false
console.log(!false); //true
3.运算符的优先级
// 一单目、二乘除、三加减、四比较、五逻辑(&&、||)、最后赋值
let ret = !10 * 20 + 10 > 300 && 200 < 100;
// 单目:逻辑非!10、整数值+10、负数值-10
// 单目运算符是指只接受一个操作数的操作符,包括赋值运算符(=)、算术运算符(+ 、-、*、/)、逻辑运算符(|| 、&& 、!)、位逻辑运算符(& 、| 、^ 、~)、位移运算符(>>、<<)、关系运算符(> 、< 、==)、自增自减运算符(++ 、–)。
4.自增与自减
// ++自增、--自减
// 前自增、后自增与前自减、后自减 在修改变量中(单个使用)结果都一样;参与运算中情况不同
// 前自增:前自增,再参与运算。使用本次自增后的值参与运算
// 后自增:先运算,使用未自增的值参与运算,运算结束后再自增
let i = 10;
let ret1 = ++i; // i = i + 1 ret1 = i;
let j = 10;
let ret2 = j++; // ret2 = j; j = j +1
console.log(ret1, ret2); // 返回结果 11 10
// 多中自增特殊运算
let a = 10;
let ret = 10 + ++a + a++ + ++a;
console.log(ret); // 10 + 11 + 11 (+1)+ 13 =45
5.三元运算符:
① 对if...else if...双分支语句的简化
② 只要代码块中只有一条语句时才可以使用三元运算符简化
③ 还可以赋值给变量
// 表达式 ? 语句1 : 语句2
// 先判断表达式是否成立,成立执行语句1,否则执行语句2
a > 100 ? document.write('yes') : document.write('no');
// 给变量 赋值
let ret = a > 100 ? true : false;
6.布尔类型的转换
① 显示转换:将数值类型、字符串类型、其他类型转换为布尔类型,只要是有意义的转换均为true
// 将Number()转换为Boolean类型
console.log(Boolean(10)); // true
console.log(Boolean(-10)); // true
console.log(Boolean(0)); // false
// 将String()转换为Boolean类型
console.log(Boolean('hello')); // true
console.log(Boolean('')); // false
console.log(Boolean(' ')); // true,空格在字符串也具有意义
console.log(Boolean('0')); // true
② 隐式转换
// true可以转换为数值1,false可以转换为数值0
// ! 取反运算符
let i = 10;
console.log(!i); // false
let j = '';
console.log(!j); // true
// if的表达式或三元运算符表达式
if (100) {
console.log('yes'); // yes,相当于 if(Boolean(100))
}
100 ? console.log('yes') : console.log('no'); // yes
7.if 分支语句
① 分支结构:一般应用在根据条件来决定某一段代码的执行
② 执行逻辑:
· 自上而下的判断表达式是否成立,成立就执行相应代码
· 当成立的代码执行后,不会再往后判断,直接跳出if结构,进行后面的代码
· 当所有条件都不成立的时候,则执行缺省代码块
· esle if 结构可以有多个,else只能有一个且可以省略
if (表达式1) {
代码块1
}else if (表达式2) {
代码块2
}else if (表达式3) {
代码块3
}else if (表达式4) {
代码块4
}else {
缺省代码块
}
8.switch分支
① if 常用于表示一个范围,switch是一个变量和一个具体值的匹配
② 在一个变量和多个具体值的匹配的使用时,使用switch结构效率更高于if结构
③ switch穿透:如果case后面没有break,会一直输出后面的代码块,直至遇到break,或运行完整个switch代码块。
// switch 一个变量和一个具体值的匹配
// case结构可以有多个,default也可以省略
switch(变量) {
case 值1 :
代码块1
break;
case 值2 :
代码块2
break;
case 值3 :
代码块3
break;
default:
缺省代码块
}
// switch后的变量只能与case后的值比较一次,相当于===,且case后的值必须为具体的一个值
9.循环结构:重复执行一段代码
① for循环
// 1.先执行初始值
// 2.判断表达式,成立就执行循环体,否则退出循环
// 3.循环体执行结束后,执行步长
// 4.步长执行后,执行表达式
// 5.(步长→表达式→循环体)依次循环,直至结束
for (初始值 ; 表达式 ; 步长) {
循环体;
}
for (let i = 0; i < 5; i++) {
prompt('初始值为0,循环5次');
}
// 1.使用for循环将1 3 5 7 9输出
for (let i = 1; i < 10; i = i + 2) {
console.log(i);
}
// 2.使用for循环将负值-1 -2 -3 -4 ....-9输出
for (let i = 0; i > -10; i--) {
console.log(i);
}
// 3.对用户输入的10个数值进行求和
let sum = 0;
for (let i = 0; i < 5; i++) {
let n = +prompt('请输入所要求和的数');
sum += n;
}
console.log(sum);
// 4.用户输入数字,如果输入的是一位数字,则在前面补零
let userNum = prompt('随机输入一个数字');
if (userNum < 10) {
userNum = '0' + userNum
}
console.log(userNum);
// 5.将用户输入的10个数保存到一个数组中
let arr = []
for (let i = 0; i < 10; i++) {
let userArr = prompt(`请输入第${i+1}个数字`);
arr[i] = userArr;
}
console.log(arr);
// debugger观察代码运行
Sources 源代码
Scope 作用域
② while循环
- 语法
// 就是for循环的变形
while (表达式){
循环体
}
// 使用while循环,在控制台输出十个数
let i = 1;
while (i <= 10) {
console.log(i);
i++;
}
- 逻辑
1.先判断表达式是否成立,不成立则跳出循环结构
2.成立就执行循环体
3.表达式→循环体,依次循环,直到表达不成立(或提前退出)
10.循环嵌套:
// 外层循环第一次,内层循环1次,外层循环第二次,内层循环两次...外层循环第N次,内层循环N次。
// * 九九乘法表
let str = '<table>'
// 外层循环9次
for (let j = 1; j <= 9; j++) {
str += '<tr>'
// 内层循环
for (let i = 1; i < j; i++) {
str += `<td>${i}*${j}=${i * j}</td>`
}
str += '</tr>'
}
document.write(str);
11.循环中的break与continue:一般结合if语句在循环中终止循环或跳过某次循环
① 终止循环break
for (let i = 1;i < 10; i++) {
if (i % 3 ==0) {
console.log('hello'); // 1 2 hello
break; // 终止循环,不再输出
}
console.log(i);
}
② 跳过某次循环continue
for (let i = 1; i < 10; i++) {
if (i % 3 == 0) {
console.log('hello'); // 1 2 hello 4 5 hello 7 8 hello
continue; // 遇到3或3的倍数就输出hello
}
console.log(i);
}