JS 运算符

308 阅读3分钟

算术运算符

  1. number 运算
  • 加减乘除
let a = 1
let b = 2

// 加
let c = a + b

//减
let c = a - b

//乘
let c = a * b

//除
let c = a / b

  • 余数
let a = 7
c = a % 2

在数学运算中,a % b = (a + n*b)% b

但在 js 中不一定如此

// js 中 负数 % x = 负数

-1 % 7 // -1
  • 指数
2 ** 3 // 8
  • 自增自减
i++

++i

i--

--i

在 自增自减 中,若 i 在前,值为前 ; i在后, 值为后

let a = 10
a++ //a++的值为10

let b = 10
++b //++b的值为11

为了防止将其值搞混,我们可以用 i+=1 或 i-=1 来替代 自增自减

  • 求值运算符
let a = -8
+a // +a === -8
  • 负数运算符
let a = -8
-a // -a === 8
  1. string 运算

string 运算符只有 +

'123' + '456' // '123456'
'1' + 2 === '12'
'2' - 1 === 1

//这两种写法虽然可以得到一个值,但是不应该这样写

比较运算符

>
<
>=
<=
==   //模糊相等
!=   //模糊不相等
===  //绝对相等
!==  //绝对不相等

  • === 运算符

规则 :

类型相同看值是否相等;

如果是对象,看地址是否相等

[] !== [] (地址不同)

{} !== [] (地址不同)

一个特殊情况

NaN !== NaN


布尔运算符

||
&&
!
  • 防御性编程(防止被篡改)
console && console.log && console.log('hi')
  • ||短路逻辑
a = a || 100   //100为保底值

使用 ||短路逻辑 会有问题,如果 a 为falsy值(0,NaN,null,undefined,''),那么,也会自动判断为false,执行保底值

function add(n){
    n = n || 0;
    return n+1;
}

//我们可以将其改写成

function add(n=0){
    return n+1
}

二进制运算符

  • 或 |

比较两个二进制数,两个都为0,则为0,否则为1

  • 与 &

比较两个二进制数,两个都为1,则为1,否则为0

  • 否 ~

  • 异或 ^

比较两个二进制数,两个相同为0,否则为1

  • 左移 << ;右移 >>

整体向左/向右 移动一位

  • 头部补零的右移运算符 >>>

  • 使用运算符计算奇偶

x & 1 === 0 //偶数
x & 1 === 1 //奇数
  • 使用运算符来取整

我们可以利用 位运算 会消除小数的特性来取整,当然也可以使用 window.parseInt()来取整

console.log(3.4 >> 0)
console.log(3.4 >>> 0)
console.log(3.4 << 0)
console.log(3.4 | 0)
console.log(~~ 3.4)
  • 使用运算符交换 a b 的值
//使用 JS 来实现
let a =5;
let b = 8;
[a,b] = [b,a]
//使用 ^ 来实现
let a =5;
let b = 8;
a ^= b;
b ^= a;
a ^= b;

点运算符

  • 语法:对象.属性名 = 属性值

我们发现,当我们想要将 number 转为 string 时,会使用 1..toString(),但1不是对象,是数字

其实,js会自动使用new Number封装数字,调用其Number的prototype,调用完后在将封装的number删除


void运算符

  • 语法:void 表达式或语句

  • 作用:求表达式的值,返回undefined或执行语句

  • 需求:

我们可以通过其实现,点击一个 a标签, 但什么都不发生


逗号运算符

let a = (1,2)
// a === 2

逗号运算符会默认返回最后一个值,利用中国特性,我们可以改写函数

let fn = x => {console.log('hi'); return x+1}

//我们可以改写为

let fn = x => (console.log('hi'),x+1)

运算符优先级

详细的运算符优先级常考mdn

其中优先级最高的是 圆括号 (), 最低的是 逗号 ,

同运算符的情况下,一般是从左到右,但当运算符是赋值 = 时,顺序为从右到左


资料参考来源:饥人谷