JS算术运算符


前言

刚刚接触JS,同时也是第一次写博客,有什么做的不对的地方欢迎各位大佬指出呀ヾ(≧▽≦*)o


算术运算符

1.加法运算符 +

加法是算术运算符中比较复杂的一种;因为涉及到字符串拼接,所以内容就比较多;

  • 只包含Number数据类型时;
    注意:-0和-0相加为-0;正负无穷相加为NaN。其余都是正常的加法运算。代码如下:
		console.log(2 + 3);//5
        /* 正负0之间做加法:只有-0和-0相加才为-0,
        其余相加为0; */
        console.log((+0) + (+0));//0
        console.log((-0) + (-0));//-0
        console.log((+0) + (-0));//0
        //任何数与无穷相加都等于无穷本身
        console.log(2 + (-Infinity));//-Infinity;
        console.log(Infinity + 3);//Infinity
        /* 一正无穷和一负无穷相加等于NaN; */
        console.log(Infinity + (-Infinity));//NaN
        console.log((-Infinity) + (-Infinity));//-Infinity
        console.log(Infinity + Infinity);//Infinity
  • 其中一个操作数为Boolean数据类型时;
    将布尔转换为Number之后进行加法,即true转化为1,false转化为0。代码如下:
		// 将布尔转换为Number之后进行加法
        console.log(true + 3);//4
        console.log(false + 3);//3
  • 其中一个操作数为String数据类型时;
    若另一个操作数不是字符串,则用toString()方法或者String()函数,将其转化为字符串之后进行字符串拼接;若另一个操作数也是字符串,则直接进行字符串拼接。代码如下:
        console.log('2' + 3);//'23'
        console.log('' + 3);//'3'
        console.log('    ' + 3);//'     3'
        console.log('yun' + {});//'yun[object Object]'
        console.log('yun' + '3');//'yun3'
        console.log('yun' + NaN);//'yunNaN'
        //null和undefined
        console.log(null + '3');//'null3'
        console.log(undefined + '3');//'undefined3'
  • 其中一个操作数为引用数据类型时;
    调用它们的 toString()方法取得相应的字符串值,然后进行字符串拼接。代码如下:
		// 数组
        var arr = [];
        var arr1 = [1, 2]
        console.log(arr + 3);//'3'
        console.log(arr1 + 3);//'1,23'
        // 函数
        function fn() { }
        console.log(fn + 3);//'function fn() {}3'
        // object对象
        var obj = {}
        console.log(obj + 3);//'[object Object]3'
  • 其中一个操作数为null或者undefined时;
    将它们转换为Number之后进行运算,即null转化为0,undefined转化为NaN。代码如下:
		console.log(null + 3);//3
        console.log(undefined + 3);//NaN
  • 其中一个操作数为NaN时;
    若另一个是字符串,或者引用数据类型时,与NaN运算都会将NaN转化为字符串进行拼接;其余的与NaN运算,结果都为NaN。代码如下:
		console.log(NaN + 3);//NaN
        console.log(NaN + NaN);//NaN
        console.log(null + NaN);//NaN
        console.log(undefined + NaN);//NaN
        console.log('yun' + 3);//'yunNaN'
        console.log([1] + NaN);//'1NaN'
        console.log([1, 2] + NaN);//'1,2NaN'
        console.log({} + NaN);//'[object Object]NaN'

2.减法运算符 -

  • 只包含Number数据类型时;
    注意:两个相同符号的无穷进行减法,结果为NaN; 而一正无穷和一负无穷相减等于正无穷Infinity;其他进行正常的减法运算。代码如下:
        console.log(2 - 3);//-1
        // 任何数与无穷相减都等于无穷
        console.log(2 - (-Infinity));//Infinity
        console.log(Infinity - 3);//Infinity
        /* 两个相同符号的无穷进行减法,结果为NaN;
        而一正无穷和一负无穷相减等于正无穷Infinity; */
        console.log(Infinity - (-Infinity));//Infinity
        console.log((-Infinity) - (-Infinity));//NaN
        console.log(Infinity - Infinity);//NaN
  • 其中一个操作数是String类型,布尔类型,引用数据类型,null和undefined时;
    引用数据类型会调用自身valueOf方法进行转换,如果转换后不是原始值,则会调用toString方法进行转换,如果转换后不是数字,则会调用Number()进行转换,如果转换后不是数字则会返回NaN;而其他类型会先转换为Number类型之后再进行计算。代码如下:
        console.log('2' - 3);//-1
        console.log('yun' - 3);//NaN
        // 数字与布尔相减---将布尔转换为Number之后进行减法
        console.log(true - 3);//-2
        console.log(false - 3);//-3
        // 数字和引用数据类型相减
        console.log([] - 3);//-3
        console.log([1]  - 3);//-2
        console.log([1, 2] - 3);//NaN
        console.log({} - 3);//NaN
        // null和undefined---转换为Number之后进行减法
        console.log(null - 3);//-3
        console.log(undefined - 3);//NaN
  • 其中一个操作数是NaN时;
    NaN和任何数据类型进行减法,其结果都为NaN。代码如下:
        console.log(NaN - 3);//NaN
        console.log(NaN - Infinity);//NaN
        console.log('yun' - NaN);//NaN
        console.log(NaN - NaN);//NaN
        console.log(null - NaN);//NaN
        console.log(undefined - NaN);//NaN
        console.log([1] - NaN);//NaN
        console.log([1, 2] - NaN);//NaN
        console.log({} - NaN);//NaN

3.乘法运算符 *

  • 只包含Number数据类型时;
    注意:0和无穷相乘,结果为NaN,其余都是正常的乘法运算。代码如下:
		console.log(2 * 3);//6
		console.log(-2 * (-Infinity));//Infinity
        console.log(Infinity * 3);//Infinity
        // 正负0和无穷相乘结果为NaN;
        console.log((-0) * (-Infinity));//NaN
        console.log((+0) * (-Infinity));//NaN
        console.log((-0) * Infinity);//NaN
        console.log((+0) * Infinity);//NaN
        /*两个相同符号的无穷进行乘法,结果为Infinity;
        而一正无穷和一负无穷相乘等于负无穷-Infinity*/
        console.log(Infinity * (-Infinity));//-Infinity
        console.log((-Infinity) * (-Infinity));//Infinity
        console.log(Infinity * Infinity);//Infinity
  • 其中一个操作数是String类型,布尔类型,引用数据类型,null和undefined时;操作和减法运算相同;代码如下:
        console.log('2' * 3);//6
        console.log('yun' * 3);//NaN
        console.log(true * 3);//3
        console.log(false * 3);//0
        console.log([] * 3);//0
        console.log([1]  * 3);//3
        console.log([1, 2] * 3);//NaN
        console.log({} * 3);//NaN
        console.log(null * 3);//0
        console.log(undefined * 3);//NaN
  • 其中一个操作数时NaN时,其运算结果总是为NaN

4.除法运算符 /

  • 只包含Number数据类型时;
    注意:正负0相除,结果为NaN;正负0做除数结果为无穷,做被除数结果为0;正负无穷相除,结果都为NaN;正负无穷做被除数,结果都为无穷;做除数,结果为0;其余都是正常的乘法运算。代码如下:
        console.log(6 / 3);//2
        //正负0之间做除法都等于NaN;
        console.log((+0) / (+0));//NaN
        console.log((-0) / (-0));//NaN
        console.log((+0) / (-0));//NaN
        //正负0做除数,结果为无穷,做被除数结果为0
        console.log((+0) / (-3));//-0
        console.log((-0) / (-3));//0
        console.log((-4) / (-0));//Infinity
        console.log((-4) / (+0));//-Infinity
        //正负无穷做被除数,结果都为无穷;做除数,结果为0
        console.log(2 / (-Infinity));//-0
        console.log(Infinity / 3);//Infinity
        // 正负无穷之间做除法都等于NaN
        console.log(Infinity / (-Infinity));//NaN
        console.log((-Infinity) / (-Infinity));//NaN
        console.log(Infinity / Infinity);//NaN
  • 其中一个操作数是String类型,布尔类型,引用数据类型,null和undefined时;操作和减法运算相同;代码如下:
        console.log('2' / 2);//1
        console.log('yun' / 2);//NaN
        console.log(true / 2);//0.5
        console.log(false / 2);//0
        console.log([] / 2);//0
        console.log([1] / 2);//0.5
        console.log([1, 2] / 2);//NaN
        console.log({} / 2);//NaN
        console.log(null / 2);//0
        console.log(undefined / 2);//NaN
  • 其中一个操作数时NaN时,其运算结果总是为NaN

5.取余运算符 %

  • 只包含Number数据类型时;
    注意:正负0之间取余,结果为NaN;正负0做被除数结果为0,做除数结果为NaN;正负无穷之间取余,结果都为NaN;正负无穷做被除数,结果为NaN;做除数,结果为被除数数值,其余都是正常的乘法运算。代码如下:
		 console.log(2 % 3);//2
        /* 正负0之间做取余都等于NaN; */
        console.log((+0) % (+0));//NaN
        console.log((-0) % (-0));//NaN
        console.log((+0) % (-0));//NaN
        /* 正负0做被除数,结果也为正负0;
        做除数,结果NaN; */
        console.log((+0) % (-3));//0
        console.log((-0) % (-3));//-0
        console.log((-4) % (-0));//NaN
        console.log((-4) % (+0));//NaN
        // 正负无穷做被除数,结果为NaN;做除数,结果为被除数数值;
        console.log((-0) % (-Infinity));//-0
        console.log(2 % (-Infinity));//2
        console.log(Infinity % 3);//NaN
        //正负无穷之间做取余都等于NaN;
        console.log(Infinity % (-Infinity));//NaN
        console.log((-Infinity) % (-Infinity));//NaN
        console.log(Infinity % Infinity);//NaN
  • 其中一个操作数是String类型,布尔类型,引用数据类型,null和undefined时;操作和减法运算相同;代码如下:
        console.log('2' % 2);//0
        console.log('yun' % 2);//NaN
        console.log(true % 2);//1
        console.log(false % 2);//0
        console.log([] % 2);//0
        console.log([1] % 2);//1
        console.log([1, 2] % 2);//NaN
        console.log({} % 2);//NaN
        console.log(null % 2);//0
        console.log(undefined % 2);//NaN
  • 其中一个操作数时NaN时,其运算结果总是为NaN

总结

加法

  • 除String类型外的基础数据类型进行加法运算时,会通过Number()方法,转为数字类型;
  • 有一个操作数String类型以及引用数据类型时,会转为字符串之后进行字符串的拼接;

减法,乘法,除法,取余

  • 基础数据类型会调用Number()方法进行转换;

  • 引用数据类型会调用自身valueOf方法进行转换,如果转换后不是原始值,则会调用toString方法进行转换,如果转换后不是数字,则会调用Number()进行转换,如果转换后不是数字则会返回NaN。

    以上就是本人对JS算术运算符一点小小的理解。有什么遗漏的欢迎大家在评论里面补充呀(●’◡’●)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值