【重走JavaScript之高级程序设计】 操作符

一、一元操作符

只操作一个值的操作符叫一元操作符

递增递减操作符

  • 前缀递增递减符号++a; --a;,变量a的值会在语句求值前被改变,具有副作用

  • 后缀递增递减符号a++; a--;,变量a的值会在语句求值后被改变,不会改变语句执行的结果。

对于递增递减操作符,与其他数据类型使用

  1. 数值字符串转变为数值再计算,非数值字符串转变为NaN再计算
  2. 布尔值false变为0再计算,布尔值true变为1再计算
  3. 浮点数加1或减1
let s1 = "2", s2 = "z", b = false, f = 1.1;
let o = {
    valueOf() {
        return -1
    }
};
s1++;   // 值变成数值3
s2++;   // 值变成NaN
b++;    // 值变成数值1
f--;    // 值变成0.1000...09(浮点数不精确)
o--;    // 值变成-2

二、一元+或-

一元+或-用法同数学。

单独使用一元+或-应用到非数值,执行Number()类型转换。布尔值转为0或1,字符串根据规则解析,对象调用valueOf或toString,+和-同理。

let s1 = "01", s2 = "1.1", s3 = "z", b = false, f = 1.1;
let o = {
    valueOf() {
        return -1
    }
};
s1 = +s1;   // 值变成数值1
s2 = +s2;   // 值变成1.1
s3 = +s3;   // 值变成NaN
b = +b;    // 值变成数值0
f = +f;    // 值仍是1.1
o = +o;    // 值变成-1

三、位操作符

四、布尔操作符

参考if语句和&&逻辑与将数据类型作为标识符

  1. 逻辑非 !
  2. 逻辑与 && 全真为真,一假则假。注意逻辑短路
  3. 逻辑或 || 全假为假,一真则真。注意逻辑短路

五、乘性操作符

  1. *乘
  2. /除
  3. %取余

六、加性操作符

加法操作符+如下,减法操作符同理

  • 数值直接相加
  • 两个字符串直接拼接,一个字符串一个数值先将数值转换为字符串再拼接。
  • 有NaN则返回Nan
  • Infinity + Infinity = Infinty; -Infinity + -Infinity = -Infinty; Infinity + -Infinity = NaN;
  • +0 + +0 = +0; -0 + +0 = +0; -0 + -0 = -0;
  • undefined null 则调用String(),返回"undefined"和"null"

七、关系操作符

< > <= >=同数学规则,结果返回布尔值

  1. 两个相同类型字符串比较,按照字符编码。
  2. 一个字符串一个数值,则将字符串转化为数值再比较。
  3. 只要有NaN,则返回false。

八、 相等操作符

等于和不等于 == 和!=

  1. 先强制转化类型再比较
  2. null == undefined // true,且null和undefined不能转化为其他类型进行比较
  3. 有NaN则返回false

全等和不全等 === 和!==

  1. 不会转化类型直接比较
  2. !==代表在不转化的前提下不想等返回true
  3. null === undefined // false,数据类型不同
  4. 推荐使用全等和不全等操作符,以免遇到类型转化问题

九、条件操作符

三元表达式,三元表达式可以嵌套但是缺乏可读性

a = 表达式 ? 真走这 : 假走这

十、赋值操作符

let num =10,将右手的值赋给左手
+= 或 *=这类复合赋值仅仅是简写语法,不会提升任何性能

十一、逗号操作符

let num1 = 1, num2 = 2, num3 = 3

posted @ 2022-08-31 00:13  wanglei1900  阅读(23)  评论(0编辑  收藏  举报