JavaScript基本语法语句与代码块

61 阅读7分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

算数运算符

第一种算数运算符: + - * / %

如果是两个字符串进行相加, 会进行拼串操作, 将两个字符串拼接为一个字符串

任何类型和字符串进行相加, 都会先转换为字符串, 然后再拼串

    var a = 5, b = 3
    console.log(a + b);
    console.log(a - b);
    console.log(a * b);
    console.log(a / b);
    console.log(a % b);

    console.log("123" + "456"); // 123456
    console.log(123 + "456"); // 123456
    console.log("123" + 456); // 123456

第二种算数运算符: ++ --

++在后, 后+1, 也就是先返回当前的值, 然后再自增1

++在前, 先+1, 也就是先自增1, 然后再返回自增后的值

--在后, 后-1, 也就是先返回当前的值, 然后再自减1

--在前, 先-1, 也就是先自减1, 然后再返回自减后的值

    console.log(a++); // 5
    console.log(++a); // 7

    console.log(a--); // 7
    console.log(--a); // 5

第三种算数运算符: 单目+ 单目-

单目+可以将其它类型的数据转换为数值型数据

单目-可以将数值型数据符号取反

    var c = true, d = null, e = undefined;
    console.log(+c); // 1
    console.log(+d); // 0
    console.log(+e); // NaN

    var f = 2, g = -4;
    console.log(-f); // -2
    console.log(-g); // 4

逻辑运算符

逻辑运算符有! && ||

逻辑运算的结果必然是一个布尔值, true或者false

!的作用是对一个布尔值取反, 我们可以利用!!来将其它的类型快速转换为布尔类型

&&当两个表达式的值都为true时, 才会返回true, 只要有一个为false, 就会返回false

||当左右两个表达式的值都为false时, 才会返回false, 只要有一个为true, 就会返回true

    // 逻辑运算符!  &&  ||
    console.log(!true); // false
    console.log(!false); // true
    console.log(!!123); // true
    console.log(!!"hello"); // true
    console.log(!!null); // false
    console.log(!!undefined); // false

    console.log(true && true); // true
    console.log(true && false); // false
    console.log(false && true); // false
    console.log(false && false); // false

    console.log(true || true); // true
    console.log(true || false); // true
    console.log(false || true); // true
    console.log(false || false); // false

    // &&短路现象
    // 当逻辑与的第一个表达式的值为false时, 则不再进行第二个表达式的计算与判断, 称为逻辑与的短路现象
    false && console.log("&&我执行了吗?")
    true && console.log("&&我执行了吧!")


    // ||短路现象
    // 当逻辑或的第一个表达式的值为true时, 则不再进行第二个表达式的计算与判断,称为逻辑或的短路现象
    true || console.log("||我执行了吗?")
    false || console.log("||我执行了吧!")

对于逻辑与&&, 当左右两边为非布尔型的值时, 如果左边的值为false, 则返回左边的值; 如果左边的值为true, 则返回右边的值

对于逻辑||, 当左边两边为非布尔型的值时, 如果左边的值为true, 则返回左边的值; 如果左边的值为false, 则返回右边的值

    // &&的返回值的规则
   console.log(1 && 2); // 2
   console.log(0 && -2); // 0

   // ||的返回值的规则
   console.log(3 || 4); // 3
   console.log(0 || null); // null

赋值运算符

赋值运算符有六个, 简单直接的赋值运算 = , 以及带算数运算符的赋值运算符

对于两个字符串的+=, 相当于拼串操作

    let a = 5, b = 3; // 简单的赋值运算
    console.log(a += b); // ==> a = a + 3 = 8
    console.log(a -= b); // ==> a = a - 3 = 5
    console.log(a *= b); // ==> a = a * 3 = 15
    console.log(a /= b); // ==> a = a / 3 = 5
    console.log(a %= b); // ==> a = a % 3 = 2
    console.log('hi, ' + 'boy'); // 拼串操作

关系运算符

关系运算符的运算结果为布尔值, 如果关系成立则返回true, 如果关系不成立则返回false

如果左右两边的值都为字符串, 则是会逐位比较字符串中字符在unicode编码表中的位置

如果左右两边为非数值, 则是会转换为数值型再进行比较

    let a = 5, b = 3;
    console.log(a > b); // true
    console.log(a < b); // false
    console.log(a >= b); // true
    console.log(a <= b); // false

    console.log(true > false); // true
    console.log('a' > 'b'); // false
    console.log('21' > '3'); // false

相等运算符 不等运算符

== 如果左右两边的值相等则返回true, 不等则返回false

!= 如果左右两边的值不等则返回false, 相等则返回true

如果两边的类型不同, 则会将它们转换为相同的类型再进行比较

注意: NaN和任何值相比都是false

    console.log(3 == 5); // false
    console.log(5 == 5); // true
    console.log(3 != 5); // true
    console.log(5 == 5); // true
    console.log(12 == '12'); // true
    console.log('12' == '12'); // true
    console.log(null == undefined); // true
    console.log(null == NaN); // false
    console.log(undefined == NaN); // false

恒等运算符 不恒等运算符

=== 如果左右两边的值数据类型相同, 并且值也相等则返回true, 否则返回false

!== 如果左右两边的值数据类型不同, 或者值不同, 则返回true, 否则返回false

    console.log(12 === '12'); // false
    console.log('12' === '12'); // true
    console.log(null === undefined); // false

三元运算符

也叫条件运算符

条件语句 ? 表达式1 : 表达式2

如果条件语句为真则执行表达式1, 为假则执行表达式2

    let a = 5, b = 3;
    let max = a > b ? a : b;
    console.log(max);

    true ? console.log('这里是真') : console.log('这里是假');
    false ? console.log('这里是真') : console.log('这里是假');

运算符的优先级

只需记住一个原则, 那就是我们可以使用()小括号让表达式变得容易阅读, 容易理解

if语句

if语句分为三种

一种只有条件判断, 满足条件则执行该语句, 否则不执行

一种是分支语句, 满足条件执行其中一条, 不满足执行另一条

一种是多个分支语句, 满足哪条判断, 就执行对应的那条语句

    let a = 2, b = 3;
    if (a > b) {
        console.log('a的值大: ' + a);
    }

    if (a > b) {
        console.log('a的值大: ' + a);
    } else {
        console.log('b的值大: ' + b);
    }

    let score = 40;
    if (score > 100) {
        console.log('分类不太正常啊');
    } else if (score >= 90) {
        console.log('小伙子非常优秀!');
    } else if (score >= 80) {
        console.log('小伙子考得还不错.');
    } else if (score >= 60) {
        console.log('还有很大的进度空间...');
    } else {
        console.log('奖励一份皮鞭炒肉!!!');
    }

switch...case语句

将switch后面的值和每个case后面的值进行比较, 符合的话, 则执行当前case则对应的语句

如果所有的case都不符合, 则执行default语句

注意每个case后面的break是必须的, 否则就会出现执行多个case中语句的情况

    // switch
    // 判断春夏秋冬
    let season = 2;
    switch (season) {
        case 1:
        console.log('这是春季');
            break;
            case 2:
        console.log('这是夏季');
            break;
            case 3:
        console.log('这是秋季');
            break;
        case 4:
            console.log('这是冬季');
            break;
    
        default:
            console.log('什么季节都不是');
            break;
    }

    let score = 1000;
    switch (true) {
        case score >= 90 && score <= 100:
            console.log('很优秀!');
            break;
        case score >= 80:
            console.log('继续努力!!');
            break;
        case score >= 60:
            console.log('你还没有用尽全力!!!');
            break;
        default:
            console.log('进步的空间很大哦!!!!');
            break;
    }

while循环

特点: 先对条件进行判断, 如果条件为真, 则执行循环体, 然后再进行条件判断, 直到为假

    // while
    let sum = 0;
    let i = 1;
    while(i <= 100) {
        sum += i++;
    }
    console.log(sum); // 5050

dowhile循环

特点: 先执行循环体一次, 再对条件进行判断, 如果条件为真, 则执行循环体, 然后再进行条件判断, 直到为假

    // do while
    do {
        console.log('do whiel');
    } while (false);

for循环

特点: 将变量初始化, 条件判断和条件变化都放入到一个括号中, 让代码更简洁, 易读

    // for
    sum = 0;
    for (let i = 1; i <= 100; i++) {
        sum += i;
    }
    console.log(sum); // 5050

break continue

break语句, 退出离它最近的循环, 结束整个循环

continue语句: 退出本次循环的执行, 也就是本次不再执行它后面的语句, 但不会结束整个循环

    for (let i = 0; i < 10; i++) {
        for (let j = 0; j < 10; j++) {
            if (j == 5) {
                // break; // 每到j==5的时候, 都会结束这个内层循环, 因此j一起是 0 到 4
                continue; // 每到j==5的时候, 都会结束这个内层循环的本次执行, , 因此不会输出j - 5的语句
            }
            console.log('j - ' + j);
        }
        console.log('i --- ' + i);
    }

label:statement

label相当于给循环添加一个标识, 那么当使用break与continue语句时, 就可以作用于指定的循环, 而不是作用于最近的循环

    outer: 
    for (let i = 0; i < 10; i++) {
        for (let j = 0; j < 10; j++) {
            if (j == 5) {
                break outer; // 当j==5时, 我们直接结束outer所标识的循环, 也就是外层循环
                // continue outer; // 当j==5的时候, 我们直接跳过outer所标识的循环, 也就是外层循环
            }
            console.log('j - ' + j);
        }
        console.log('i --- ' + i);
    }