JS基础-算数运算符

算术运算符主要用于算数操作,算术运算符包括一元算术运算符和二元算术运算符

一元算术运算符

在JS中一元算术运算符包括一元加法+,一元减法-,递增++,递减--

一元加

一元加法运算符使用符号+表示,放在数值前面,对数值不会产生任何影响

var num = 1;
num = +num; // 1

如果为非数值应用一元加法运算,会自动代用Number()转型函数

var s1 = '01';
var s2 = '1.1';
var s3 = 'a';
var b = true;
var f = 1.1;
var o = {
valueOf: function() {
 return '-1';
}
}

s1 = +s1; // 1
s2 = +s2; // 1.1
s3 = +s3; // NaN
b = true; // 1
f = +f; // 1.1
o = +o;   // -1

new Date()使用一元加运算,可以把日期字符串转换为毫秒数

new Date();   // Mon Apr 23 2018 18:11:18 GMT+0800 (中国标准时间)
+new Date();  // 1524478278112

一元减

一元减法运算主要用于表示负数

var num = 1;
num = -num;  // -1

如果为非数值应用一元减法运算,会自动代用Number()转型函数,再将得到的数值转换为负数

var s1 = '01';
 var s2 = '1.1';
 var s3 = 'a';
 var b = true;
 var f = 1.1;
 var o = {
 valueOf: function() {
   return '-1';
 }
}

 s1 = -s1; // -1
 s2 = -s2; // -1.1
 s3 = -s3; // NaN
 b = true; // -1
 f = -f;   // -1.1
 o = -o;   // 1

一元加和一元减运算符不仅用于基本的算符运算,也常用于转换数据类型

递增

递增运算符用于对操作数进行增量操作,运算符通过调用Number()转型函数将操作数转换为数字,然后把数字加1后的结果重新赋值给变量或数字元素或对象属性

var num = 1;
++num;

var num2 = 1;
num2++;


console.log(num); // 2
console.log(num2); // 2

增量运算符的返回值依赖于它相对于操作数的位置,当运算符在操作数之前时,称为前增量运算符,前增量运算符返回计算后的值;当运算符在操作数之后时,称为后增量运算符,后增量运算符返回计算前的值。

var num = 1;
var ret = ++num;

console.log(num, ret)  // 2  2

var num2 = 1;
var ret2 = num2++;

console.log(num2, ret2) // 2  1

注意: ++x增量操作并不完全等于x = x + 1++运算符不进行字符串拼接,而x = x + 1会进行字符串拼接

var num = '1';
++num; // 2

var num2 = '1';
num2 = num2 + 1; // '11' 字符串拼接,返回字符串

递减

同递增运算符类似,递减运算符用于减量(减1)操作,运算符通过调用Number()转型函数将操作数转换为数字,然后把数字减1后的结果重新赋值给变量或数字元素或对象属性

var num = 1;
--num;

var num2 = 1;
num2--;


console.log(num); // 0
console.log(num2); // 0

当运算符在操作数之前时,返回计算后的值;当操作符位于操作数之后时,返回计算前的值。

var num = 1;
var ret = --num;

console.log(num, ret)  // 0  0

var num2 = 1;
var ret2 = num2--;

console.log(num2, ret2) // 0  1

二元算数运算符

二元算数运算符包括加法(+)、减法(-)、乘法(*)、除法(/)、求模(%)

加法

JS中的加法运算有很多特殊行为,不仅可以用于基本的算数运算,还可用于字符串拼接,它的特殊行为主要表现在以下几点:

  1. 如果其中一个操作数是对象,那么对象会转换为原始值。如果能通过valueOf()返回原始值,则调用valueOf()方法,如果不能则通过toString()方法执行转换。
1 + [1, 2, 3]; // '11, 2, 3'

var o = {
  valueOf: function(){
    return -1;
  },
  toString: function() {
    return 2;
  }
}
 
console.log(1 + o); // 0
  1. 对象转换为原始值后,如果其中一个操作数是字符串,另一个操作数也会转为字符串,进行字符串拼接操作
// 原生对象调用toString()方法后转换为字符串
1 + {};          // '1[object Object]'
1 + [1,2,3];     // '11, 2, 3'
1 + new Date();  // 1Mon Apr 23 2018 18:11:18 GMT+0800 (中国标准时间)
'' + null;  // 'null'
'' + true; // 'true'
'' + undefined; // 'undefined'
  1. 对象转换为原始值后,如果操作数都是非字符串,则操作数将转换为数字或NaN,进行加法操作
false + false; // 0
true + true;   // 2
null + null;  // 0
undefined + undefined; // NaN

注意: Infinity和符号0较为特殊

Number.MAX_VALUE + Number.MAX_VALUE === Infinity;  // true
+0 === -0; // true
Infinity + (-Infinity);  //NaN

减法

减法运算只进行基本的数字运算,通过Number()转型函数将非数值类型转换为数值或NaN。

1 - {}; // NaN
1 - [1,2,3]; // NaN
1 - []; // 1
1 - undefined; // NaN
1 - false; // 1
1 - true; // 0

在和Date对象进行运算时,加法和其他运算操作有些不同,加法运算是使用toString()转换为字符串,其他运算(减、乘、除和求余)是使用Number()转型函数将Date对象使用valueOf()转为数字

new Date() - 1; // 1524478278111
new Date() + 1;  // Mon Apr 23 2018 18:11:18 GMT+0800 (中国标准时间)1

乘法

乘法运算符用于计算数值的乘积,通过Number()转型函数将非数值类型转换为数值或NaN。

1 * {}; // NaN
1 * [1,2,3]; // NaN
1 * []; // 0
1 * undefined; // NaN
1 * false; // 0
1 * true; // 1
Infinity * Infinity; // Infinity

除法

除法运算符用于计算第一个操作符除以第二个操作符的结果,通过Number()转型函数将非数值类型转换为数值或NaN。

Infinity / Infinity; //NaN
0 / 0; //NaN

求模

求模就是求余,计算第一个操作符除以第二个操作符的余数。

求余结果同第一个操作符的符号保持一致

5 % 2; // 1
5 % -2; // 1
-5 % 2; // -1
-5 % -2; // -1

被除数是Infinity,或除数是0,则求模结果是NaN

Infinity % 2; //  NaN
2 % 0; // NaN
posted @ 2021-09-29 09:45  wmui  阅读(255)  评论(0编辑  收藏  举报