JavaScript运算符

Rinsann 2021年08月22日 344次浏览

JavaScript运算符

算术运算符

number运算

  • 加减乘除
  • 余数 x % 7
  • 指数 x ** 3
  • 自增自减 x++ /++x / x--/--x
  • 求值运算符 +x (+号只是求一下这个x的值)
  • 负数运算符 -x (正数变负数,负数变正数)

string运算

  • 连接运算 ‘123’ + ‘456’

a++ 的值是a+之前的值,++a的值是a+了之后的值。

字符串支持 + 运算,把两个字符串拼接起来,如果数字和字符串相加,那么就会把数字变成字符串然后拼接起来。

字符串减数字会把字符串变成数字再相减

不同类型不要加起来,把1 和 ‘2’ 加起来让人无法理解。

比较运算符

>  大于
<  小于
>= 大于等于
<= 小于等于
== 模糊相等
!= 不模糊相等
=== 全等
!==	不全等

JS三位一体

image20210901200058739.png

0 == []

0 == ‘0’

0 == ‘\t’

右边跟0都相等,但是右边三个互不相等。

永远不要使用==,用 === 替代 ,== 的问题在于,它会进行自动类型转换

x == y 真值表

image-20210901200407041

[] == false 但不是 falsy

[] == fasle 但 {} 却不是

[[]] == false

x === y 真值表

image20210901200840994.png

  • 基本类型看值是否相等
  • 对象看地址是否相等
  • [] !== {} , {} !== {}
  • NaN !== NaN 唯一特例

布尔运算符

或且非

  • ||
  • &&
  • !

短路逻辑

  • console && console.log && console.log(‘hi’),以防console.log 不存在报错
  • a = a || 100 , a的保底值,a是真值就是a,是falsy值就是100

二进制运算符

或 、与 、否

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

异或

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

左移右移

  • << 和 >>

头部补零的有移运算符

  • >>>

使用与运算符判断奇偶

代码

  • 偶数 & 1 = 0
  • 技术 & 1 = 1

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

代码

console.log(~~ 6.83)   //6,取反再取反 位运算不支持小数 得到的就是正数
console.log(6.83 >> 0) //6  右移0位,位运算
console.log(6.83 << 0) //6 左移0位,位运算 
console.log(6.83 | 0) //6 
console.log(6.83 >>> 0) //6

使用^来交换a b 的值

代码

var a = 5
var b = 8
a ^= b  //异或运算相同位0 不同为1
b ^= a
a ^= b
console.log(a) //8
console.log(b) //5

image20210901204714997.png

点运算符

语法

  • 对象.属性名 = 属性值

作用

  • 读取对象的属性值

疑问

  • 不是对象,为什么也可以有属性? ‘a-b-c’.split(‘-’)
  • JS有特殊逻辑,点前面不是对象,就把它封装成对象
  • number会变成Number对象
  • string会变成String对象
  • bool 会变成 Boolean对象
  • 一般不用这三种,只用简单类型,在使用.的时候会创建封装对象,封装对象在用完之后会马上销毁

void运算符

语法

  • void表达式或语句

作用

  • 求表达式的值,或执行语句
  • 然后void的值总是为undefined,作用就是得到undefined

需求

<a href="http://example.com" onlick="f();return false;">点击</a> return假值可以阻止默认动作
<a href="javascript:void(f())">文字</a>  改用void可以炫技

逗号运算符

语法

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

作用

  • 将表达式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

优先级就是先算什么后算什么

技巧:圆括号优先级最高