操作符篇(二)

ECMAScript中的操作符是独特的,因为他们可用于各种值,包括字符串、数值、布尔值,甚至还有对象。

指数操作符

ECMAScript 2017新增,使用两个**表示,相当于使用Math.pow()

加性操作符

即加法和减法操作符

加法操作符

  • 如果有任一操作数是 NaN,则返回 NaN;
  • 如果是 InfinityInfinity,则返回 Infinity;
  • 如果是-Infinity-Infinity,则返回-Infinity;
  • 如果是 Infinity-Infinity,则返回 NaN;
  • 如果是+0+0,则返回+0;
  • 如果是-0+0,则返回+0;
  • 如果是-0-0,则返回-0
    不过,如果有一个操作数是字符串,则要应用如下规则:
  • 如果两个操作数都是字符串,则将第二个字符串拼接到第一个字符串后面;
  • 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,再将两个字符串拼接在一起。
    如果有任一操作数是对象、数值或布尔值,则调用它们的 toString()方法以获取字符串,然后再
    应用前面的关于字符串的规则。对于 undefinednull,则调用 String()函数,分别获取 "undefined""null"
console.log(12 + 12) //24
console.log(12 + '12') //'1212' 有一个是字符串会变成字符串加
console.log(12 + true) //13 并没有应用前面的规则
console.log(12 + {}) //'12[object Object]' 应用了规则

console.log(12 + '') //'12' 将数值转换成字符串

减法操作符

  • 如果两个操作数都是数值,则执行数学减法运算并返回结果。
  • 如果有任一操作数是 NaN,则返回 NaN
  • 如果是 InfinityInfinity,则返回 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()方法,然后再将得到的字符串转换为数值。
console.log(5 - '2') //3 减法会将字符串数值转换为数值再执行减操作
let result1 = 5 - true; // true被转换为1,所以结果是4 
let result2 = NaN - 1; // NaN
let result3 = 5-3; //2
let result4 = 5 - ""; // ""被转换为0,所以结果是5
let result6 = 5 - null;// null被转换为0,所以结果是5

关系操作符

关系操作符执行比较两个值得操作,包括小于(<)、大于(>)、小于等于(<=)和大于等于(>=)
在将他们应用到不同数据类型是也会发生类型转换和其他行为:

  • 如果操作数有一个是数值或布尔值,则比较时会转换为数值
  • 如果操作数都是字符串,则比较对应字符的编码
  • 如果有任一操作数是对象,则调用valueOf()方法,再执行前面的规则。如果没有valueOf()方法,则调用toString()方法,再执行前面的规则

    任何关系操作符在设计比较NaN时都返回false

相等操作符

包括相等,不相等,全等和不全等。相等用==,不相等用!=,全等用===,不全等用!==
相等和不相等会先进行类型转换再确定操作符是否相等

nullundefined相等,并且他们不能转换为其他类型的值再比较
NaN 是不等于NaN
两个对象如果要相等,需要引用相等,即指向同一个对象

console.log(NaN == NaN) //false
console.log((null == undefined) //true
console.log(null === undefined) //false 类型不同
let obj = {}
let another = obj
console.log(obj == another) //true 
console.log({} == {}) //false 引用不同
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值