Javascript基础Ⅱ

144 阅读3分钟

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(变量) {
        case1 :
            代码块1
            break;
        case2 :
            代码块2
            break;
        case3 :
            代码块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);
    }