JavaScript运算符

138 阅读3分钟

目录

算术运算符

比较运算符

布尔运算符

其他运算符

运算符优先级

运算符优先级 - JavaScript | MDN

  • 总结:

    1. 不要用 ==

    2. 不要用 a++


一、算数运算符

1.number运算

  • 加减乘除+、-、*、/ 不能除0,会得到无限大

  • 余数x%7 负数的余数会把负号提出来

  • 指数x**3

  • 自增自检 x++、++x、x--、--x 数字在前返回值为运算前,数字在后返回值为运算后

  • 求值运算符 +x

  • 负数运算符 -x

注意的事项

  • 如果加法是数字和字符串相加,则会把数字变成字符串不同类型尽量不要加起来
'1'+ 2
// '12'
  • 如果减法是数字和字符串相减,会把字符串变成数字
'2' - 1
// 1
  • 尽量不要用自增自减,把a++换成a += 1

2.string运算

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

  • 字符串只支持加号运算

二、比较运算符

  • > 大于

  • < 小于

  • >= 大于等于

  • <= 小于等于

  • == 模糊等于 永远不要使用两个等号,只能用三个等号

bf43d24c031541393a2398636d0eb81.png

0b761a1c25b8f0e14cd13e4fbb57253.png

  • != 不等于

  • === 全等 基本类型看值是否相等,对象看地址是否相等[] !== [] // ture

37e604dc8001c0d6d7f2f089bd5d91d.png

  • !== 不全等 NaN !== NaN

三、布尔运算符

1.或、且、非

  • ||

  • &&

  • !

2.短路逻辑

  • console&&console.log&&console.log('hi') 防御性编程

  • 以防console不存在,导致代码报错程序异常

  • a = a || 100

  • a的保底值,但这样写有一定的漏洞

  • 最新写法

function add(n=0){
  return n+1
}
 
add(null) // 1
add(undefined) // 1
add('') // 1

四、其他运算符

1.二进制运算符(只对二进制有效)

或、与、否

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

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

  • ~ 有点复杂,需要的时候看MDN

异或

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

左移右移

  • <<>> 把数字向左或向右移动一位

  • >>> 头部补零运算符 这个没咋学 一辈子基本上都用不上

特点

  • 面试喜欢问,但实际工作用不到

面试问题

  • 1.使用与运算符判断奇偶

  • 代码

偶数 & 0b001 = 0
奇数 & 0b001 = 1
  • 2.使用~、>>、<<、|取整

  • 代码

console.log(~~ 3.14) // 3
console.log(3.14 >> 0) // 3
console.log(0 << 3.14) // 3
console.log(3.14 | 0) // 3
console.log(3.14 >>> 0) // 3
  • 3.使用^交换a,b的值

  • 代码

var a = 5
var b = 8
a ^= b
b ^= a
a ^= b
// a = 8
// b = 5
  • 其实新语法很快就搞定了

[a,b] = [b,a] 效果一样

2.点运算符

语法

  • 对象.属性名 = 属性值

作用

  • 读取对象的属性值

特殊的地方

  • 不是对象用.操作符,JS不会报错

  • JS会发现不是对象,创建一个临时对象,你用完以后,立马删掉这个临时对象

特殊逻辑

  • 点前面如果不是对象,JS会把它封装成一个对象

  • number会变成Number对象string会变成String对象bool会变成Boolean对象

  • 程序员从不用这三种对象,只用简单类型对象

3.void运算符

语法

  • void 表达式语句

作用

  • 求表达式的值,或执行语句

  • 然后void的值总是为undefined

4.逗号运算符

语法

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

作用

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

使用

  • let a = (1,2,3,4,5)

  • a = 5(egg 疼)

  • let f = (x) => (console.log('平方值为'),x*x) 如果不想写return 可以用逗号隔开,函数会默认取最后的表达式为返回值

  • 但必须要把函数体用圆括号括起来

五、运算符优先级

不同运算符

  • 1+2*3(1+2)*3还是1+(2*3) 先加减后乘除,小学生都会

  • !a === 1(!a) === 1 还是 !(a === 1) 加括号,括哪个,哪个优先级最高

相同运算符

  • 从左到右计算 a + b + c

  • 从右到左赋值 a = b = c = d 等同于 a = (b = (c = d))

优先级汇总

  • 不需要记,因为太繁杂,需要的时候看MDN即可

  • 技巧:圆括号优先级最高,如果需要提高优先级直接圆括号括起来即可