学习笔记4-表达式和运算符

表达式和运算符

运算符

运算符 说明 示例
+ 加法 3+4 //7
- 减法 4-2 //2
/ 除法 4/2 //2
* 乘法 3*4 //12
% 取余 4%3 //1
- 负号 -4
+ 正号 +4
++ 自增 ++x, x++
-- 自减 --x,x--

自增和自减

前置自增(自减),优先增加(减少),然后赋值给变量;
后置自增(自减),优先赋值给变量,然后增加(减少);
如果自增(自减)不赋值给其他变量,前置后置效果是一样的;

    let number;
    let number1 = 10;
    number = ++number1;
    console.log(number, number1); // 11 11
    number = number1++;
    console.log(number, number1); // 11 12

    number = --number1;
    console.log(number, number1); // 11 11
    number = number1--;
    console.log(number, number1); // 11 10

    number1++;
    console.log(number1); // 11
    ++number1;
    console.log(number1); // 12

运算符优先级

高优先级运算优先低优先级运算符,搞不清楚时,善用括号

比较运算符

  • 相等(===, ==)\
  1. ===,严格相等,引用的是相同的对象,或者拥有相同类型(基本类型)和相同的值;
  2. ==,非严格相等,属于同一个对象,或者强制转化为相同的值;
    let num = 33;
    let str = '33';
    console.log(num === str); // false
    console.log(num == str); // true
  • 关系运算符
    小于(<), 小于等于(<=), 大于(>), 大于等于(>=)
    比较运算符比较的是拥有自然排序特性的数据类型,比如,字符串,数字;

比较数字

  • NaN与任何值不相等,包括自己(NaN)
  • 小数比较时,特别注意,他们之间不要直接比较,而是通过差值和Number.EPSILON比较;
    // 因为双精度问题,此循环会一致运行的
    let number = 0.1;
    while (true) {
        number += 0.1;
        if (number === 0.3) break;
        console.log(number);
    }

    let number = 0.1;
    while (true) {
        number += 0.1;
        if (Math.abs(number - 0.3) < Number.EPSILON) break;
        console.log(number);
    }

真值和假值

  1. 假值
    • undefined
    • null
    • false
    • 0
    • NaN
  2. 除了假值,全为真值,惊喜不

与,或和非

与(&&) 或(||) 非(!)
同时满足为真 满足一个条件即为真 取反
x y x&&y
false false false
true false false
false true false
true true true
x y x||y
false false false
true false true
false true true
true true true
x !x
false true
true false

条件运算符

表达式1 ? 表达式1为true表达式 : 表达式1为false表达式

位运算符

运算符 描述 示例
& 位与 0b1 & 0b0 = 0b0
| 位或 0b1 | 0b0 = 0b1
^ 位异或 0b1 ^ 0b0 = 0b1, 0b1 ^ 0b1 = 0b0
~ 位非 ~0b1 = 0b0, ~0b0 = 0b1
<< 左移位 0b1 << 1 = 0b10
>> 右移位 0b10 >> 1 = 0b1
<< 补零右移位 1 << 1 = 0b10

类型判断运算符

表达式 返回值
typeof undefined "undefined"
typeof null "object"
typeof {} "object"
typeof true "boolean"
typeof 1 "number"
typeof "" "string"
typeof Symbol() "symbol"
typeof function(){} "function"

解构赋值

解构赋值,允许把一个对象或者数组分解成多个单独的值

    const obj = { a: 2, b: 3};
    let {a, b} = obj;
    console.log(a, b); //2, 3

    const arr = [1, 2, 3];
    let [a, b] = arr;
    console.log(a, b); //1, 2

    const arr = [1, 2, 3, 4];
    let [a, b, ...rest] = arr;
    console.log(a, b, rest); //1, 2, [3, 4]

展开运算符(...),应用于数组或者对象。 一个对数组或者对象进行展开插值 一个是对数组或者对象进行局部的赋值

对象和数组运算符

运算符 描述
. 成员访问
[] 成员访问
in 判断属性是否存在
new 实例化对象
instanceof 原型链测试
... 展开运算符
delete 删除运算符

你可能感兴趣的:(学习笔记4-表达式和运算符)