#算术运算符

1. 概述

JavasScript提供十个算术运算符

  • 加法运算符
  • 减法运算符
  • 乘法运算符
  • 除法运算符
  • 指数运算符
  • 余数运算符
  • 数值运算符
  • 负数值运算符
  • 自增运算符
  • 自减运算符

减法、乘法、除法运算符就是单纯的数学运算,下面介绍其它几个运算符,重点是加法运算符。

2. 加法运算符

加法运算符有两种运算规则:

  • 数学意义上的相加
  • 连接字符串

2.1 基本规则
非字符串类型的数据相加时执行数学运算

1+1 //2
1 + true // 2

false + true //1

1 + null //1
1 + undefined // NaN

当有字符串参与时会执行连接运算

1 + '1' //'11'
false + '2' //'false2'

注意运算的顺序是从左往右

3 + '4' +5 //'345'
3 + 4 + '5' //'75'

2.2 对象的相加
对象在执行连接运算符的时候,先转换为原始类型,然后再相加。
对象转原始类型的值规则如下:

  1. 先调用valueOf返回对象自身,
  2. 再调用toString方法将其转为字符串

需要注意的是如果valueOf返回的是基础数据类型则直接当作返回值不再执行toString方法

var a = {};
var b = function(){foo};

a + 1 // '[object Object]1'
a + b; // '[object Object]function(){foo}'

知道了这个规则以后就可以自定义valueOf或者toString方法得到想要的返回值

   const obj = {
      valueOf:function(){
        return 1;
      }
    };
    1 + obj //2

   const obj1  = {
    toString: function(){
      return 'custom'
    }
   };
   
   1 + obj1 // '1custom'

这里面有一个特例就是 Date类型,Date类型直接执行toString方法进行转换,不会执行valueOf

const date = new Date();
date.valueOf = function(){ return 'jack' };
date.toString = function(){return 'tom' };

1 + date // '1tom'

余数运算符

余数运算符(%)返回前一个运算子被后一个运算子除,所得的余数。

 11 %3;  //2

自增和自减运算符

自增和自减运算符的作用是先将运算子(参与运算的值)转换为数字类型再加上或者减去1,这会产生副作用(side effect),修改变量的值。

先返回再运算

let a = 1;
a++; //1

先运算再返回

let a = 1;
++a; //2

数值运算符和负数值运算符

数值运算符也使用加号,但是它是一元运算符(只需要一个操作数),作用是将任何值转换为数值,功能与Number相同。

+ null; //0
+ {}; //NaN
+ undefined; //NaN
+ []; //0

负数值运算符与数值运算符的差别只在数值上的正负

+ null; //0
- null; //-0
+ true; //+1
- true; //-1

指数运算符

2 ** 3; //8

指数运算符是右结合,先计算右边再计算左边

2 ** 3 ** 2; //等同于 2 ** (3 ** 2);
//512

赋值运算符

const x = 1;
const y = x;

赋值运算符与其它运算符结合

x + = y; //等同于 x = x + y
x - = y; //等同于 x = x - y
x * = y; //等同于 x = x * y
x / = y; //等同于 x = x / y
x % = y; //等同于 x = x % y
x ** = y; //等同于 x = x ** y

总结

  • 加号运算符再运算的时候分为数学运算和连接运算
  • 对象进行连接运算的时候会先转换为原始值,转换的方法是先调用valueOf方法再调用toString方法,如果valueOf返回结果为基础数据类型则取valueOf的返回值作为结果,不再执行toString方法
  • 可以自定义valueOf或者toString方法
  • Date类型的数据在进行连接运算时直接调用toString方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值