JS运算符

125 阅读2分钟

算数运算符

number运算

  • 加减乘除
  • 余数 x % 7
-1 % 7   //-1
  • 指数 x ** 3
  • 自增自减x++/++x/x--/--x 尽量少使用自增自减
var a = 1
a++  // 1
++a  // 2
  • 求值运算符 +X
var a = 8
+a
8
  • 负数运算符 -x
var  a = -8
-8
8

string运算符

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

问?

1 + '2'
"12"

先把数字变成字符串

'2' - 1
1

由于字符串不支持减号,所以把字符串变成数字

不同类型的不要加起来


比较运算符

  • 大于

  • < 小于
  • = 大于等于

  • <= 小于等于
  • == 模糊相等
  • != 不模糊相等
  • === 全等
  • !== 不全等

JS三位一体

0 == []
0 == '0'
0 == '\t'

但是右边三个互不相等

永远不要使用 ==,用 ===代替

问题在于:==会自动类型转换

基本类型看值是否相同

对象看地址是否相等

{} !== {} [] !== [] 都不相等,地址不同只是恰巧都为空

唯一特列: NaN !== NaN

布尔运算符

或且非

  • ||
  • &&
  • !

短路逻辑

  • console && console.log && console.log('hi')
  • 可以简写成: console?.log?('hi')
  • 防止console被改写,console存在且console.log存在
  • 以防console不存在报错
  • a = a || 100
  • 最新写法,写到参数中function add(n=0)
  • a的保底值

二进制运算符

或、与、否

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

异或

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

左移右移 << >>

头部补零的右移运算符

  • ( >>> )

使用与运算符判断奇偶

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

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

console.log(~~ 6.83)     //二进制取反,位运算不支持小数,会自动抹去小数,两次取反获得二进制整数 
console.log(6.83 >> 0)   //什么都不动 但是会消除小数  
console.log(6.83 << 0)
console.log(6.83 | 0)    // 抹去小数
console.log(6.89 >>> 0)  

使用 ^ 来交换a b 的值

var a = 5
var b = 8
a ^= b
b ^= a
a ^= b
console.log(a)  //8
console.log(b)  //5

点运算符

语法

  • 对象.属性名 = 属性值
  • 读取对象的属性值
  • 点只能用在对象上面
  • 如果a不是对象,用点运算符时会自动将他变成对象,先搞出一个封装对象,然后调用,然后直接删除这个封装对象,每次.都会创建不一样的对象
  • number会变成Number对象
  • string会变成String对象
  • bool会变成 Boolean对象
  • 以上三个和 == ++ 永远不要用
var a = 1
a.toString =1
"1"

void运算符

语法

  • void表达式或语句

作用

  • 求表达式的值,或执行语句
  • 然后void的值总为undefined
void console.log('hi')
hi
undefined

需求

  • 你需要一个a标签但是不让他有任何的动作
  • href="javascript:;"

逗号运算符

语法

  • 表达式1,表达式2,...

作用

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

使用

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

运算符优先级

  • 圆括号优先级最高
  • 会用圆括号就行

不同运算符

相同运算符

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

==不学

优先级不学