前言
刚刚接触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算术运算符一点小小的理解。有什么遗漏的欢迎大家在评论里面补充呀(●’◡’●)