JS的运算符

javascript


运算符

算数运算符 + - * / %

关系运算符 > < >= <= != === !==

      值为布尔值,两边都是字符串时则比较ASCII码(单个); 多个时则逐个比较(1-1 2-a…); 两个有一个数值时,将另一个转换成数值.

      :当一个数是NaN,则==返回的是false,!=返回的是true,且NaN与自身不等。

         ===:恒等,当数值和数据类型都相等才返回true

         null转为数字时是0,undefined转为数字是NaN.

逻辑运算符 && || !(优先级先&&再||)

与:表达式1&&表达式2 (两个为真时真)

      如果第一个表达式的值为真,则返回表达式2
      如果第一个表达式的值为假,则返回表达式1

或:表达式1||表达式2 (两个为假时假)

      如果第一个表达式的值为真,则返回表达式1
      如果第一个表达式的值为假,则返回表达式2

非:!表达式

      先将表达式的值取布尔值再取反(非0即真,非空即真)

console.log((!(~+[])+{})[--[~+""][+[]]*[~+[]] + ~~!+[]]+({}+[])[[~!+[]]*~+[]]);

一元运算符 ++ –

       对原有变量+1,a++(++后置,先取a作为a++的表达式的值在a+1)与++a(++前置);

赋值运算符 基本赋值=

          复合赋值+= -= *= /= %=

          如num=num+5;与num+=5;相同


表达式

自动数据类型转换

1.其中一个是字符串且符号为+,其他会转为字符串并拼接;

2.其中一个是字符串且符号不为+,字符串转为数字再运算;(字符为纯数字会运算,否则为NaN,NaN和任何运算都是NaN)

3.字符串以外的数据,在运算时,先转为数字再运算;(true为1,false为0,null为0,undefined为NaN)




操作符

~ 按位非(反码)

用于数字类型即取反后-1

~5 = -6
// 一般用于indexOf()   ~-1 = 0

~ ~两次取反

保持原值,但布尔值会转为数字

~~true = 1
~~5 = 5
~~6.25 = 6 //相当于parseInt且效率更高

^ 位异或

对两个二进制操作数逐位进行比较,返回结果

12 ^ 5 = 9

& 按位与

用于判断奇偶

偶数 & 1 = 0
奇数 & 1 = 1

| 位或

用于对两个二进制操作数逐位进行比较,并计算返回结果

可以用于取整

123.45 | 0 = 123

?. 可选链

let a;
let b = a?.name;
/* 只有当a存在,同时a具有name属性的时候,才会把值赋给b,否则就会将undefined赋值给b
   重要的是,不管a存在与否,这么做都不会报错*/

// 操作 obj?.a   obj?.[a]   arr?.[index]   fun?.(args)

?? 合并空值

let b;
let a = 0;
let c = { name:'zs' }

b = a ?? c;
/* 当a除了undefined、或者null之外的任何值,b都会等于a,否则就等于c*/

??= 空值赋值

let b = '你好';
let a = 0
let c = null;
let d =123‘
b ??= a;  // b = “你好”
c ??= d  // c = '123'

/* 当??=左侧的值为null、undefined的时候,才会将右侧变量的值赋值给左侧变量.其他所有值都不会进行赋值*/

&&=

let num1 = 5;
let num2 = 10;
num1 &&= num2;
console.log(num1); // 10

// 等价于
num1 && (num1 = num2);
if (num1) {
    num1 = num2;
 } 

||=

let num1;
let num2 = 10;
num1 ||= num2;
console.log(num1); // 10

// 等价于
num1 || (num1 = num2);
if (!num1) {
   num1 = num2;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Raccom

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值