JS运算符

101 阅读2分钟

算数运算符

加减乘除

  • 加 +
  • 减 -
  • 乘 *
  • 除 /
    • 不能除以零,输出值为Infinity或者-Infinity

余数

  • 特殊情况

1632664224(1).png

  • 如图-1/7的余数,JS算成是-(1%7),结果为-1,.
  • 而正确的算法是-1%7=6%7,-1和6相差7,所以余数为6

指数

  • x**3 ,x的3次方

自增自减

  • a++/++a,a--/--a 取值,a在前,式子的值为前,在后,式子的值为后

运算 +

  • 仅仅作为值的运算,并不能把值由负变正

-

  • 不同于+,能把正变负,把负变正

string运算 只支持+,的运算,其他的都不支持

  • 连接运算 '123'+'456'
  • 奇葩案例

1632666830(1).png
如果把数字和字符串相加,Js会把数字变成字符串,然后拼接

1632666963(1).png
如果把数字和字符串相减,JS先把字符串变成数字,然后相减运算

小结:js有时候不会对错误的代码报错!!!!!!

使用注意点!!!!!!!!!!!!!!!!

尽量少用自增,自减

  • 大多数情况下:a++写成 a=a+1或者a+=1
  • for循环中的条件for(let i=0,i<10,i++)

不同的数据类型不要相加

JS三位一体

image.png

  • 外面的三个都等于0,但是他们互不相等
  • 永远不要使用==代替===,JS会自动转换数据类型!!!!
  • js数据自动转换数据类型机制参考zhuanlan.zhihu.com/p/22745278

x == y 真值表

image.png

  • 令人难以理解
  • []==false但不是 falsy
  • []==false但{}却不是
  • [[]]==false

x === y 真值表

image.png

没有任何费解

  1. 基本类型看值是否相等
  2. 对象看地址是否相等
  3. 以上两个条件必须同时满足
  • [] !== [] 两个空数组地址可能不相等
  • {} !== {} 两个空对象地址可能不相等
  • 唯一特例!!!!!!! NaN!==NaN

布尔运算符

或、且、非

  • ||
  • &&
  • !

短路逻辑

-案例1 console&& console.log && console.log('hi')

  • 原理:防止consle,console.log被篡改或者不存在,报错 06a58f2f2b9b8b97de14467f7d46f4a.png
  • 案例2 a = a || 100:a的保底值是100
  • 原理:

48ead9826248231456fe0b475303f83.png
n没有初始值,函数无法执行,如果加了if判断,n的保底值为0

cf82d29afcc1c39a4c89a74a5aab932.png
简写,但是当n=b||0时,判断条件同时成立,所以直接简些成n=n||0,但是这种写法存在bug,你的5个falsy值都会让他为假

  • 新语法

a81d9ad94aab8d2cc8c71cbffa84341.png
如果n是null或者undefined,n的值为0,如果n为空字符串,直接字符串拼接(数据类型不同js自动转换数据类型)

二进制运算符

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

ae1b392a19c9c0c49637c0a922ab44f.png

使用与运算符判断奇偶

代码

  • 偶数 & 1 = 0
  • 奇数 & 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,二进制运算抹除小数

使用^来交换 a b 的值

代码

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

1632728060(1).png