002-操作符

  1. 一元操作符
    只能操作一个值的操作符叫做一元操作符

(1)递增和递减操作符,前置型和后置型

let a = 10;
let b = 2;
let c = --a + b//11
let a = 10;
let b = 2;
let c = a-- + b//12

(2)一元加和减操作符
一元加以一个(+)表示,放在数值前面,对数值不会产生任何影响;一元减主要表示负数

+20//20
-20//-20

(3)布尔操作符
逻辑非(!)
可以应用于ECMAScript中的任意值,无论这个值是什么类型,都会返回一个布尔值。逻辑非首先会将它的操作数转化为一个布尔值,然后对其取反

操作数返回值
!{}false
!""true
!“你好吗”false
!0true
!(非0数值(包含Infinity))false
!nulltrue
!NaNtrue
!undifinedtrue

同时使用2个!!,会模拟Boolean()转型函数的行为

逻辑与(&&)
逻辑与操作属于短路操作,即第一个操作数能够决定结果,那么就不会对第二个操作数求值
真值表:

第一个操作数第二个操作数结果
truetruetrue
falsetruefalse
truefalsefalse
falsefalsefalse

逻辑与操作可以用于任何类型的操作数,而不仅仅是布尔值,在有一个操作数不是布尔值的情况下,逻辑与操作就不一定返回布尔值,它遵循下列规则:

第一个操作数第二个操作数结果
objectany返回第二个操作数
anyobject当第一个个求值结果为true时才返回该对象
nullanynull
NaNanyNaN
undefinedanyundefined

逻辑或(||)
真值表:

第一个操作数第二个操作数结果
truetruetrue
falsetruetrue
truefalsetrue
falsefalsefalse

逻辑或操作可以用于任何类型的操作数,而不仅仅是布尔值,在有一个操作数不是布尔值的情况下,逻辑或操作就不一定返回布尔值,它遵循下列规则:

第一个操作数第二个操作数结果
objectany返回第一个操作数
falseobject当第一个求值结果为false时才返回第二个操作数
objectobject返回第一个操作数
nullnullnull
NaNNaNNaN
undefinedundefinedundefined

(4)乘性操作符
如果参与乘性计算的某个操作数不是数值,后台会先调用Number()函数将其转化为数值,也就是说空字符串将被当作0,布尔true将被当作1

乘法
如果操作数都是数值,执行常规的乘法计算,即两个正数相乘或两个负数相乘的结果还是正数,如果有一个为负数,那么结果为负数。如果乘积超过了ECMASript的范围,则返回Infinity或-Infinity。

操作数结果
有一个是NaNNaN
Infinity*0NaN
Infinity*非0Infinity
InfinityInfinity

除法
如果操作数都是数值,执行常规的除法计算,即两个正数相除或两个负除相乘的结果还是正数,如果有一个为负数,那么结果为负数。如果商超过了ECMASript的范围,则返回Infinity或-Infinity。

操作数结果
有一个是NaNNaN
Infinity/InfinityNaN
0/0NaN
非0的有限数被0除Infinity或-Infinity
Infinity/非0的有限数Infinity或-Infinity

求模(%)
如果操作数都是数值,执行常规的除法计算,返回除得的余数

操作数结果
无穷大%有限大NaN
有限大数值%0NaN
Infinity%InfinityNaN
有限大的数值%无穷大的数值结果是被除数
除数是00

(5)加性操作符
加法(+)
如果两个操作符都是数值,执行常规的加法计算,根据下列结果返回结果:

操作数结果
有一个为NaNNaN
Infinity+InfinityInfinity
-Infinity + -Infinity-Infinity
Infinity+ -InfinityNaN
0+00
-0 + -0-0
0+ -00

如果有一个操作数是字符串,则将另一个操作数转化为字符串,然后与第一个操作数拼接。如果都是字符串,则将第一个和第二个拼接起来
如果有一个操作数是undefine、null、对象、数值或者布尔值,则调用他们的toString()方法取得相对应的字符串,然后在执行字符串拼接,

减法(-)
如果两个操作符都是数值,执行常规的减法计算,根据下列结果返回结果:

操作数结果
有一个为NaNNaN
Infinity-InfinityNaN
Infinity - -InfinityInfinity
-Infinity - Infinity-Infinity
-Infinity- -InfinityNaN
0-00
-0 - 0-0
-0 - -00

如果有一个操作数是对象,则调用对象的valueOf()方法取得该对象的数值,如果没有valueOf()方法,则调用toString()方法,如果转化结果为NaN,则结果为NaN
如果有一个操作数是undefine、null、字符串或者布尔值,则调用他们的number()方法取得相对应的数值,然后在执行计算,如果转化结果为NaN,则结果为NaN

(6)关系操作符(<)、(>)、(<=)、(>=)
如果两个操作数都是数值,则执行数值比较
如果两都是字符串,则比较两个字符串对应的字符编码值
如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较
如果一个操作数是对象,则调用valueOf()方法,用得到的结果按照前面的比较,如果没有valueOf()方法,则调用toString()方法,然后按照字符串比较
如果一个操作数是布尔值,则先将其转化为数值,然后再执行比较

(7)相等操作符
相等不相等先转化在比较,全等不全等仅比较而不转换
如果有一个操作数是布尔值,先将其转化为数值,false转化为0,true转化为1;
如果一个操作数是字符串,另一个是数值,先将字符串转化为数值然后比较;
如果一个操作数是对象,另一个不是,则先调用valueOf()方法,用得到的基本类型值再按照前面的规则进行比较;
null和undefined是相等的;
Nan和任何值都不相等,包括它本身;
如果两个操作数都是对象,则比较它们是不是同一个对象

(8)条件操作符

let a = 2>0 ? 1 : 0// 1

(9)复制操作符(=)
每个主要算术操作符,都有对应的符合赋值操作符

操作符
*=
/=
%=
+=
-=
左移<<=
有符号右移>>=
无符号右移>>>=

(10)逗号操作符

let a=1,b=2,c=3//一条语句中执行多个操作
let d=(4,5,6,1)//1 用于赋值是逗号操作符总返回表达式中的最后一项
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值