JS 运算符

  • 算数运算符
  • 比较运算符
  • 布尔运算符
  • 二进制运算符
  • 其他运算符

算数运算符

number 运算

  • 加减乘除
  • 余数 x % 7
  • 指数 x ** 3
  • 自增自减 x++ / ++x / x-- / --x
    • a 在前,表达式是取之前的值
  • 求值运算符 +x
    • + 后面加任何数,那么就是加这个
  • 负数运算符 -x

string 运算

  • 连接运算 '123' + '456'

比较运算符

  • >
  • <
  • >=
  • <=
  • == // 模糊相等
  • != // 不 模糊相等
  • === // 全等
  • !== // 不全等

1
2
3
4

布尔运算符

或且非

  • ||
  • &&
  • !

短路逻辑

  • console && console.log && console.log('hi')
  • 以防 console 不存在导致报错
  • a = a || 100
  • a 的保底值

二进制运算符

或、与、否

  • | 两个位都为 0,则结果为 0,否则为 1
  • &
  • ~

异或

  • ^
  • 两个位相同,则结果为 0,否则为 1

左移右移

  • <<>>

头部补零的右移运算符

  • >>>

位运算符在JS中的妙用

使用与运算符判断奇偶

代码

  • 偶数 & 1 = 0
  • 奇数 & 1 = 1

使用 ~,>>,<<,>>>,| 来取整

使用 ^ 来交换 a b 的值

代码

点运算符

语法

  • 对象.属性名 = 属性值

作用

  • 读取对象的属性值
    • 只能用在对象上面

有个疑问

  • 不是对象,为什么也可以有属性? 'a-b-c'.split('-')
  • JS 有特殊逻辑,点前面不是对象, 就把它封装成对象
  • number 会变成 Number 对象
  • string 会变成 String 对象
  • bool 会变成 Boolean 对象
  • 程序员 从来不用这三种对象,只用简单类型

== , new Number, ++ 这辈子都不要用

void 运算符

语法

  • void 表达式或语句

左右

  • 求表达式的值,或执行语句
  • 然后 void 的值总是为 undefined

需求

  • <a href="http://examle.com" onclick="f(); return flase;">点击</a>
  • return 假值 可以阻止默认动作
  • <a href="javascript: void(f())"> 文字 </a>
  • 改用 void 可以炫技

逗号运算符

语法

  • 表达式1, 表达式2, …, 表达式n

作用

  • 将表达式 n 的值作为整体的值

使用

  • let a = (1,2,3,4,5)
  • 那么 a 的值就是 5
  • let f = (x) => (console.log('平方值为', x*x)
  • 注意上面的括号不能省

运算符优先级

不同运算符

  • 1 + 2 * 3 是 (1 + 2) * 3 还是 1 + (2 * 3)
  • ! a === 1(!a) === 1 还是 !(a === 1)
  • new Person().sayHi() 是什么意思

相同运算符

  • 从左到右 a + b + c
  • 从右到左 a = b = c = d

优先级技术先算什么后算什么

优先级汇总

  • 圆括号优先级最高
  • 会用圆括号就行
  • 其他一律不记

4
4
4
4
4
4
4
4
4
4