JS 运算符

101 阅读1分钟

一、算术运算符

  1. number 运算
  • 加减乘除(除以0会变为正负无穷Infinity
  • 余数 x % 7
  • 指数 x ** 3
  • 自增自减
x++ / ++x(区别: 值不同,x++的值是x,++x的值是++x,x在前为前,x在后为后) 
/ x-- / --x(x在前为前,x在后为后)
  • 求值运算符 +x(不改变符号)
  • 负数运算符 -x(会改变符号)
  1. string 运算
  • 连接运算 '123' + '456'(只能用+)
  1. 尽量少用自增自减,因为容易记错
  2. 不同类型不要加起来

二、比较运算符

>
<
>=
<=
==(模糊相等)
!=(不模糊相等)
===(全等)
!==(不相等)
  1. JS三位一体 image.png
0 == []
0 == '0'
0 == '\t'
但是右边三个互不相等
  • 忠告:永远不要使用 ==,用 === 代替,== 的问题在于,它总是自动类型转换
  1. x === y 真值表

image.png

  • 没有任何费解
  • 基本类型看值是否相等
  • 对象看地址是否相等
  • 特例,强行记忆一下:
NaN !== NaN
[] !== []
{} !== {}

三、布尔运算符

  1. 或且非
|| 或
&& 且
!  非
  1. 短路逻辑
  • console && console.log && console.log('hi') ,防御性代码,以防 console 不存在报错
  • console?.log?('hi'),可选链语法
  • a = a || 100a 的保底值是100,建议使用新语法:
function add(n=0){
   return n+1
}

四、二进制位运算符

  1. 或、与、否
  • | 两个位都为0,则结果为0,否则为1
  • & - ~
  1. 异或
  • ^
  • 两个位相同,则结果为0,否则为1
  1. 左移右移
  • <<>>
  1. 头部补零的右移运算符
  • >>>

五、位运算符

  1. 使用与运算符判断奇偶
偶数 & 1 = 0
奇数 & 1 = 1
  1. 使用~, >>, <<, >>>, |来取整
console.log(~~ 6.83)    // 6
console.log(6.83 >> 0)  // 6
console.log(6.83 << 0)  // 6
console.log(6.83 | 0)   // 6
console.log(6.83 >>> 0)   // 6
  1. 使用^来交换 a b 的值
var a = 5
var b = 8
a ^= b
b ^= a
a ^= b
console.log(a)   // 8
console.log(b)   // 5

六、其他运算符

  1. 点运算符
  • 语法:对象.属性名 = 属性值
  • 作用:读取对象的属性值
  • 有个疑问,不是对象,为什么也可以有属性?'a-b-c'.split('-')
  • 因为:JS 有特殊逻辑,点前面不是对象,就把它封装成对象,number 会变成 Number 对象,string 会变成 String 对象,bool 会变成 Boolean 对象
  1. void 运算符
  • 语法:void 表达式或语句
  • 作用:求表达式的值,或执行语句,然后 void 的值总是undefined
  • 需求
<a href="http://example.com" onclick="f(); return false;">点击</a>
return 假值可以阻止默认动作
<a href="javascript: void(f())">文字</a>
  1. 逗号运算符
  • 语法:表达式1, 表达式2, ..., 表达式n
  • 作用:将表达式 n 的值作为整体的值
  • 使用
let a = (1,2,3,4,5)
那么 a 的值就是 5,奇葩吧?
let f = (x) => (console.log('平方值为'), x*x)
注意上面的括号不能省