js之操作符

操作符

操作符包含数学操作符、位操作符、关系操作符和相等操作符;
操作符可以用于各种值,包括字符串,数值,布尔值,甚至还有对象,操作符通常会调用valueOf或toString()来取得可以计算的值

一元操作符

只操作一个值的操作符叫一元操作符

递增、递减操作符

递增和递减有两个版本,前缀版和后缀版,前缀版是放在操作变量的前头,后缀版是放在操作变量的后头。
① 前缀递增:会给数值加1 ++放到变量前面
前缀递减:会给数值减1 --放到变量前面
无论使用前缀递增还是前缀递减操作符,变量的值都会在语句被求值之前改变。
② 后缀递增:会给数值加1 ++放到变量后面
后缀递减:会给数值减1 --放到变量后面
后缀版递增和递减在语句被求值后才发生。
后者是先计算再自身加一,前者是先给自身加一再去计算
递增和递减操作符遵循如下规则
①对于字符串,如果是有效的数值形式,则转换为数值再应用改变。变量类型从字符串变成数值。
②对于字符串,如果不是有效的数值形式,则将变量的值设置为 NaN 。变量类型从字符串变成数值。
③对于布尔值,如果是 false,则转换为 0 再应用改变。变量类型从布尔值变成数值。
④对于布尔值,如果是 true,则转换为 1 再应用改变。变量类型从布尔值变成数值。
⑤对于浮点值,加 1 或减 1。
⑥ 如果是对象,则调用其(第 5 章会详细介绍的)valueOf()方法取得可以操作的值。对得到的值应用上述规则。如果是 NaN,则调用 toString()并再次应用其他规则。变量类型从对象变成数值。

一元加和减

一元加:由一个(+)表示,放函数前头,对数值没有啥影响。
如果将一元加应用到非数值,则会执行与使用 Number()转型函数一样的类型转换:布尔值 false和 true 转换为 0 和 1,字符串根据特殊规则进行解析,对象会调用它们的 valueOf()和/或 toString()方法以得到可以转换的值。
一元减:由一个减号(-)表示,放在变量前头,主要用于把数值变成负值,在应用到非数值时,一元减会遵循与一元加同样的规则,先对它们进行转换,然后再取负值

布尔操作符

逻辑非

逻辑非操作符由一个叹号(!)表示,。这个操作符始终返回布尔值,无论应用到的是什么数据类型。逻辑非操作符首先将操作数转换为布尔值,然后再对其取反。
规则
如果操作数是对象,则返回 false。
如果操作数是空字符串,则返回 true。
如果操作数是非空字符串,则返回 false。
如果操作数是数值 0,则返回 true。
如果操作数是非 0 数值(包括 Infinity),则返回 false。
如果操作数是 null,则返回 true。
如果操作数是 NaN,则返回 true。
如果操作数是 undefined,则返回 true。
逻辑非操作符也可以用于把任意值转换为布尔值。同时使用两个叹号(!!),相当于调用了转型函数 Boolean()。无论操作数是什么类型,第一个叹号总会返回布尔值。第二个叹号对该布尔值取反,从而给出变量真正对应的布尔值。

逻辑与

逻辑与操作符由两个和号(&&)表示,应用到两个值
逻辑与操作符可用于任何类型的操作数,不限于布尔值。如果有操作数不是布尔值,则逻辑与并不一定会返回布尔值
规则
如果第一个操作数是对象,则返回第二个操作数
如果第二个操作数是对象,第一个操作数为true才返回这个对象
如果两个操作数都是对象则返回第二个操作数
如果有一个操作数是null,NaN,undefined则返回null,NaN,undefined
逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数求值。对逻辑与操作符来说,如果第一个操作数是 false,那么无论第二个操作数是什么值,结果也不可能等于 true。

逻辑非

逻辑或操作符由两个管道符(||)表示
如果第一个操作数是对象,则返回第一个操作数。
如果第一个操作数求值为 false,则返回第二个操作数。
如果两个操作数都是对象,则返回第一个操作数。
如果两个操作数都是 null,则返回 null。
如果两个操作数都是 NaN,则返回 NaN。
如果两个操作数都是 undefined,则返回 undefined。
同样与逻辑与类似,逻辑或操作符也具有短路的特性。只不过对逻辑或而言,第一个操作数求值为true,第二个操作数就不会再被求值了。

乘法操作符

乘法操作符由一个星号(*)表示,可以用于计算两个数值的乘积。
规则
如果是都是数值,遵循正常的运算,正正得正,正负得负,负负得正;
如果ECMAScript不能表示乘积则返回Infinity或-Infinity;
如果有一方是NaN则返回NaN
如果Infinity乘以非0数值,取符号,返回Infinity或-Infinity;
如果Infinity乘以0返回NaN
如果Infinity乘以Infinity返回Infinity
如果不是数值的操作数先转换为数值再计算

除法操作符

除法操作符由一个斜杠(/)表示,用于计算第一个操作数除以第二个操作数的商
规则
如果操作数都是数值,则执行常规的除法运算,即两个正值相除是正值,两个负值相除也是正
值,符号不同的值相除得到负值。如果ECMAScript不能表示商,则返回Infinity或-Infinity。
如果有任一操作数是 NaN,则返回 NaN。
如果是 Infinity 除以 Infinity,则返回 NaN。
如果是 0 除以 0,则返回 NaN。
如果是非 0 的有限值除以 0,则根据第一个操作数的符号返回 Infinity 或-Infinity。
如果是 Infinity 除以任何数值,则根据第二个操作数的符号返回 Infinity 或-Infinity。
如果有不是数值的操作数,则先在后台用 Number()函数将其转换为数值

取模操作符

取模(余数)操作符由一个百分比符号(%)表示
规则
如果操作数是数值,正常计算取余
如果除数是无限数,被除数是有限数,返回被除数
如果被除数是无限数,除数是无限数,返回NaN
如果被除数是有限数,除数是0,返回NaN
如果除数不是0,被除数不是0,返回0,
如果有不是数值的操作数,则先在后台用 Number()函数将其转换为数值

指数操作符

math.pow()或者es7新增了**表示;
指数操作符也有自己的指数赋值操作符 **=,该操作符执行指数运算和结果的赋值操作

加性操作符

加性操作符,即加法和减法操作符
加法操作符
加法操作符(+)用于求两个数的和
规则
如果有任意一方是NaN,返回NaN
如果是Infinity 加Infinity, 返回Infinity
如果Infinity 加 - Infinity ,返回 NaN
如果+0 加+0 返回+0
-0加+0 返回+0
-0加-0返回-0
如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面;
如果只有一个操作数是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起。
如果有任一操作数是对象、数值或布尔值,则调用它们的 toString()方法以获取字符串,然后再应用前面的关于字符串的规则。对于 undefined 和 null,则调用 String()函数,分别获取"undefined"和"null"。
减法操作符
减法操作符(-)也是使用很频繁的一种操作符
规则
如果两个操作数都是数值,则执行数学减法运算并返回结果。
如果有任一操作数是 NaN,则返回 NaN。
如果是 Infinity 减 Infinity,则返回 NaN。
如果是-Infinity 减-Infinity,则返回 NaN。
如果是 Infinity 减-Infinity,则返回 Infinity。
如果是-Infinity 减 Infinity,则返回-Infinity。
如果是+0 减+0,则返回+0。
如果是+0 减-0,则返回-0。
如果是-0 减-0,则返回+0。
如果有任一操作数是字符串、布尔值、null 或 undefined,则先在后台使用 Number()将其转换为数值,然后再根据前面的规则执行数学运算。如果转换结果是 NaN,则减法计算的结果是NaN。
如果有任一操作数是对象,则调用其 valueOf()方法取得表示它的数值。如果该值是 NaN,则减法计算的结果是 NaN。如果对象没有valueOf()方法,则调用其 toString()方法,然后再将得到的字符串转换为数值。
关系操作符
关系操作符执行比较两个值的操作,包括小于(<)、大于(>)、小于等于(<=)和大于等于(>=),用法跟数学课上学的一样。这几个操作符都返回布尔值,
规则
如果操作数都是数值,则执行数值比较。
如果操作数都是字符串,则逐个比较字符串中对应字符的编码。
如果有任一操作数是数值,则将另一个操作数转换为数值,执行数值比较。
如果有任一操作数是对象,则调用其 valueOf()方法,取得结果后再根据前面的规则执行比较。
如果没有 valueOf()操作符,则调用 toString()方法,取得结果后再根据前面的规则执行比较。
如果有任一操作数是布尔值,则将其转换为数值再执行比较。

相等操作符

判断两个变量是否相等是编程中最重要的操作之一。
等于和不等于
等于操作符用两个等于号(==)表示,如果操作数相等,则会返回 true。
不等于操作符用叹号和等于号(!=)表示,如果两个操作数不相等,则会返回 true。
此过程会执行强制类型转换
规则
如果任意一方是布尔值转化为数值再比较
如果是字符串,另外一个是数字,则将字符串转化为数字在比较
如果操作数是对象,另外一个不是,调用对象的valueof取到原始值然后再比较
如果俩都是对象,如果他们都指向于同一个对象则相等,否则不相等
null和undefined相等
NaN跟谁都不相等,跟自己也不相等
全等和不全等
===不发生强制转换 , ==发生强制转换
条件操作符

 variable = boolean_expression ? true_value : false_value;

赋值操作符
简单赋值用等于号(=)表示,将右手边的值赋给左手边的变量
复合赋值操作符
乘后赋值(*=)
除后赋值(/=)
取模后赋值(%=)
加后赋值(+=)
减后赋值(-=)
左移后赋值(<<=)
右移后赋值(>>=)
无符号右移后赋值(>>>=)
逗号操作符
逗号操作符可以用来在一条语句中执行多个操作

let num1 = 1, num2 = 2, num3 = 3;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值