JS 运算符

156 阅读2分钟

目录

  1. 算术运算符
  2. 比较运算符
  3. 布尔运算符
  4. 二进制位运算符
  5. 其他运算符
  6. 运算符优先级

一、算术运算符(数学运算)

number 运算

  • 加减乘除

1.png

  • 余数 x % 7

2.png

  • 指数 x ** 3

1.png

  • 自增自减 x++ / ++x / x-- / --x (a在前值为前a在后值为后) 1.png

  • 求值运算符 +x

  • 负数运算符 -x

string 运算

  • 连接运算 '123' + '456'
  • (加号能把字符串加起来,只支持加号)
  • 数字加字符串 1+'2'是错误的,JS不提示
  • (JS会默认先把数字变成字符串,返回结果'12')
  • 字符串减数字 '2'-1也是错误,JS不提示
  • (会默认先把字符串变成数字,返回结果1)

忠告:

  1. 尽量少用自增自减,因为容易你和别人都记错
  2. 不同类型不要加起来

二、比较运算符

 >
 <
 >=
 <=
 ==     模糊相等  (不使用)
 !=     不模糊相等模糊
 ===    全等
 !==    不全等           NaN !== NaN

1.png

三、布尔运算符

或且非

 ||
 &&
 !

短路逻辑

  • console && console.log && console.log('hi')
  • 如果console和console.log存在就执行console.log('hi')
  • 以防 console 不存在报错
  • a = a || 100
  • 如果a存在a=a,a不存在则a=100

四、二进制位运算符

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

五、其他运算符

点运算符

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

void 运算符

语法
void 表达式或语句
作用
求表达式的值,或执行语句
然后 void 的值总是为 undefined
需求
<a href="http://example.com" onclick="f(); return false;">点击</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
优先级就是先算什么后算什么
具体规则想知道吗?
你:想。
不,你不想!看看这里就知道为什么。

优先级汇总

汇总表位于 MDN

  • 一共有20个运算符
  • 怎么记忆呢

技巧

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

image.png