JavaScript 算数运算符

算数运算符使用数值(字面量或者变量)作为操作数,并且返回一个单个数值。

标准运算符是加法(+),减法(-),乘法(*),除法(/)

ECMAScript操作符的与众不同之处在于,它们能够适应很多值,例如字符串、数字、布尔值,甚至是对象。

但是,在应用于对象时,相应的操作符通常都会调用对象的 valueOf() 或是 toString() 方法,以便获取可以操作的值。

加性操作符


一、加法(+)

加法可以实现数值的加减 ,以及字符串拼接

语法:

x +  y

实例:

1、(Number + Number )数值类型相加

1+1 // 2

2、(Boolean + Number) 布尔值与数值相加,布尔类型转换为数值

  true运算时等同于 1,false 运算的时候相当于 0

true + 1  // 2

3、(Boolean + Boolean)布尔类型与布尔类型相加,布尔类型转换为数值

false + false;   //0
true + true;   // 2
false + true;   // 1

4、(Number + String)数值与字符串类型的相加,字符串拼串

‘No‘ + 1   // ‘No1‘

5、(String + String)字符串类型与字符串类型相加 ,字符串拼串

‘say‘ + ‘hallo‘      // "sayhallo"

6、(String + Boolean) 字符串类型与布尔类型相加,字符串拼串

‘result = ‘+true    //"result = true"

两个操作符都是数值,执行常规加法计算,然后根据下列规则返回结果:

1、如果有一个操作数是 NaN,则结果是 NaN;

2、如果是 Infinity 加 Infinity ,则结果是 Infinity;

3、如果是 -Infinity 加  -Infinity,则结果是 -Infinity;

4、如果是 Infinity 加 -Infinity,则结果是 NaN;

5、如果是 +0 加 -0,则结果是 +0;

6、如果是 -0 加 -0,则结果是 -0;

7、如果是 +0 加 +0,则结果是 +0;

但是当有一个操作符号是字符串的时候,就要应用如下规则:

  1、如果两个操作符都是字符串,则将第一个操作符与第二个操作符拼接起来;

  2、如果只有一个操作符是字符串,则将另一个操作符转换为字符串;

如果有一个操作数是对象、数值、或是布尔值,则调用它们的 toString() 方法取得相应的字符串值,然后再应用前面的关于字符串的规则。

对于 undefined 和 null,分别调用 String() 函数取得字符串 ‘undefined‘ 和 ‘null‘ 。

二、减法(-)

使两个操作符号相减,求其差值。

语法:

x - y

实例:

按照普通减法运算的规则计算。

数值类型的值减去字符串类型的数字,得到的结果是数值类型的值。

true 转换为 1,false 转换为 0;

‘‘转换为 0,‘2’ 转换为 2,null 转换为 0;

9 - 2    // 7
2 - 9    // -7
9 - ‘2‘    // 7
‘ww‘-7     //NaN

 减法操作符在处理各种数据类型转换的时候,也需要遵循一些特殊规则:

  1、如果有一个操作数是 NaN,则结果是 NaN;

  2、如果是 Infinity 减 Infinity ,则结果是 NaN;

  3、如果是 -Infinity 减  -Infinity,则结果是 NaN;

  4、如果是 Infinity 减 -Infinity,则结果是 Infinity;

  5、如果是 -Infinity 减 Infinity,则结果是 -Infinity;

  6、如果是 -0 减去 -0,则结果是 +0;

  7、如果是 +0 减 +0,则结果是 +0;

  8、如果是 -0 减 +0,则结果是 -0;

  9、如果有一个操作数是字符串、布尔值、null值或是 undefined,则先在后台调用 Number() 函数将其转换为数值,然后在根据前面的规则进行计算。如果转换结果是 NaN,则减法的结果是 NaN;

  10、如果有一个操作数是对象,则调用对象的 valueOf() 方法以获取表示该对象的数值。如果得到的结果是 NaN,则减法的结果是 NaN,如果对象没有 valueOf() 方法,就调用 toString() 方法并且将得到的字符串转换为数值。

乘性操作符


一、除法(/)

除法运算的结果是两个操作数的商,左面的操作数是被除数,右面的操作数是除数。

语法:

x / y

实例:

1、JS 中 1除以2 得到的是 0.5

1 / 2         //在Javscript 中返回的是 0.5
1 / 2         //在 Java中返回的是 0
//不需要数字是明确的浮点数

2、数字是浮点数

0作为除数的时候,所得结果为 infinity(无穷的)

1.0 / 2.0    //在 JS 和 Java 中都返回 0.5

2 / 0      // 在 JS 中返回 Infinity
2.0 / 0.0    //返回 Infinity
2.0 / 0.0    // 在JS中返回 - infinity
0 / 0     //  NaN

除法操作符对特殊值也有特殊的处理规则,规则如下:

  1、如果操作数都是数值,执行常规的除法计算,即同号得正,异号得负。如果商超过了 ECMAScript 数值的表示范围,则返回 Infinity 或是 -Infinity

  2、如果有一个操作数是 NaN,则结果是 NaN;

  3、如果是 Infinity 被 Infinity除,则结果是 NaN;

  4、如果是 0 被 0 除,则结果是 NaN;

  5、如果是非0的有限数被 0 除,则结果是 Infinity 或 -infinity,取决于有符号操作数的符号;

  6、如果是 Infinity 被任何非 0数值除,则结果是 Infinity 或 - Infinity,取决于有符号操作数的符号;

  7、如果有一个操作数不是数值,则在后台调用 Number() 将其转换为 数值,然后在应用上面的规则;

二、乘法(*)

乘法运算符用于计算两个数值的乘积。

语法:

x * y

实例:

1、按照普通乘法运算规则,同号得正。

3 * 3  // 9
3 * -3  // -9
-3 * -3  // 9
//同号得正,异号得负一元操作符

2、  infinity (无穷) 乘以 0 得 NaN;infinity 乘以 infinity 得 infinity

Infinity * 3    // Infinity
Infinity * Infinity   //Infinity
Infinity * -Infinity    //-Infinity

3、字符串类型与数字类型相乘 得 NaN

"ss" * 3   // NaN
‘11‘ * 3    // 33

4、布尔值会转换成数值再进行运算

true * 3  // 3
false * 3   // 0
false * true   // 0

 在处理特殊值的时候,乘法操作符遵行以下特殊规则:

  1、如果操作数都数值,执行常规的乘法计算,即同号得正,异号得负。如果乘积超过了ECMAScript  数值的表示范围,则返回 Infinity 或是 -Infinity;

  2、如果有一个操作符是 NaN,则结果是 NaN;

  3、如果是 Infinity 与 0 相乘,则结果是 NaN;

  4、如果是 Infinity 与 非0数值相乘,则结果是 Infinity 或是 -Infinity,取决于有符号操作的符号;

  5、如果是 Infinity 与 Infinity 相乘 ,则结果是 Infinity;

  6、如果有一个操作数不是数值,则在后台调用 Number() 将其转换为数值,然后再应用上面的规则。

三、求余(%)

求余运算符返回第一个操作数对第二个操作数的模,即 var1 对 var2 取模,其中 var1 和 var2 是变量。取模功能就是 var1 除以 var 2 的整型余数。

语法:

var 1 % var 2

实例:

1、负数模以正数得 0

1 % 4       // 1
1 % 0       // NaN
1 % 0.5     // 0

2、非数字(NaN)模以 数字得 NaN

NaN % 3    // NaN
6%3     // 2
2 % null     // NaN
-2 % 3     // -2
4.4 % 2    // 0.2

求模(求余)操作符由一个百分号(%)表示,遵循以下的规则来处理特殊的值:

  1、如果两个操作符都是数值,执行常规的除法计算,返回除得的余数

  2、如果被除数是无穷大值而除数是有限大的数值,则结果是 NaN

  3、如果被除数是有限大的数值,而除数是 0 ,则结果是 NaN

  4、如果是 Infinity 被 Infinity 除,则结果是 NaN

  5、如果被除数是有限大的数值,而除数是无穷大的数值,则结果是被除数

  6、如果被除数是 0 ,则结果是 0

  7、如果有一个操作数不是数值,则在后台调用 Number() 将其转换为数值,然后再应用上面的规则。

四、幂( ** )

幂运算符返回第一个操作符作底数,第二个操作数作为指数的乘方。

即 var1var2 ,其中 var1 和 var2 是其两个`操作符。

幂运算是右结合的。a ** b ** c 等同于 a ** (b ** c)。

语法:

var 1 ** var2

 注释:

包括 PHP 或是 Python 等大多数语言中,都包含幂运算符 (一般来说符号是 ^ 或是 ** )。

这些语言中的幂运算符有着比其他单目元算符(一元运算符 + / -)更高的优先级。

但是,在 Bash 中, ** 运算符被设计为比单目运算符的运算符运算符的优先级更低。

在最新的 JavaScript 中,禁止使用带有歧义的幂运算表达式,例如,底数前面可不可以紧跟一元运算符(+/-/~/!/delete/void/typeof

一元操作符



递增和递减操作符直接借鉴自 C,而且各有两个版本:前置型 和 后置型。

前置型应该位于要进行操作的变量之前;

后置型应该位于要进行操作的变量之后;

一、递增(++)和递减( -- )

递增操作符实现的效果是为其操作数增加 1,并且返回一个数值。

递减操作符号将其操作数减去 1 ,并且返回一个数值。

如果后置(postfix)使用,就会在递增(减)之前返回数值(a++ / a--)

如果前置(prefix)使用,将会在递增(减)后返回数值(++a / --a)

语法:

a++ 或者 ++a
a--  或者 --a

 这是个操作符对任何值都适用,也就是它们不仅仅适用于整数,还可以用于字符串、布尔值、浮点数值和对象。在应用于不同的值时,递增和递减操作符遵行以下规则。

  1、在应用于一个包含有效数字字符的字符串时,先将其转换成字符值,再执行加减 1 的操作。字符串变量变成数值变量。

  2、在应用于一个不包含有效数字字符的字符串时,将变量的值转换成 NaN,字符串变量变成数值变量。

  3、在应用于布尔值 false 时,先将其转换为 0再执行加减 1 的操作。布尔值变量变成数值变量。

  4、在应用于布尔值 true 时,先将其转换为 1 再执行加减 1 的操作。布尔值变量变成数值变量。

  5、在应用于浮点数值时,执行加减 1 的操作。

  6、在应用于对象时,先调用对象的 valueOf() 方法以获得一个可供操作的值。然后对该值应对前述规则。如果结果是 NaN,则在调用 toString() 方法后在应用前述规则。对象变量变数值变量。

后置型递增和递减操作符的语法不变,只不过需要放在变量之后而不是前面。后置与前置之间有一个重要的区别:递增和递减操作是在包含他们的语句中被裘值之后才执行的。

  • num++  等价于  num + 1
  • ++num  等价于  num = mun + 1

执行前置递增 和 递减操作的时候,变量的值都是在语句被求值之前被改变的(在计算机科学领域,这种情况通常被称之为副效应

实例:

前置递减:

var num1 = 2;
var num2 = 30;
var num3 = --num1 + num2;   //等于 31
var num4 = num1 = num2;     //等于 31

在这里 num3 之所以等于 31,是因为 num1 先减去了 1 才与 num2 相加。

而变量 num4 也等于 21 是因为相应的加法操作使用了 num1 减去 1之后的值。

后置递减:

var num1 = 2;
var num2 = 30;
var num3 = num1-- + num2;   //等于 32
var num4 = num1 = num2;     //等于 31

在计算的时候 num3 使用了 num1 的原始值 2完成了加法计算,

而 num4 则使用了递减后的值 1;

二、一元加号(+)

一元加操作符使用一个加号(+)表示,在数值前面不会对数值产生任何影响。

语法:

 +x

实例:

但是在对非数值应用一元加操作符号  ,该运算符会像 Number() 转型函数一样对这个值进行转换。

布尔值 true 和 false 会转换为 1和 0;字符串值会被按照一组特殊的规则解析,而对象是先调用它们的 valueOf()  或是 toString()方法,在转换它们的到的值。

  尽管一元负号也能转换非数值类型,但是一元正号是转换其他对象到数值的最快方法,也是最推荐的做法,因为它不会对数值执行多余的操作。

  可以将字符串转换为整数个浮点数形式,也可以转换为非字符串值 true、false、null。小数和十六进制格式字符串也可以转换为数值。负数形式字符串也可以转换为数值(对十六进制不适用)。如果它不能解析一个值,则计算结果为 NaN。

+ ‘02‘;     // 值变成数值 2
+ ‘2.1‘     //值变成数值 2.1
+ ‘z‘        //值变成  NaN
+ true     //值变成数值  1
+ 2.1       //值变成数值  2.1

var a = {valueOf:function() {return -1;}}
a = +a;
 // 值变成数值  -1

三、一元减号(-)

一元符号运算符位于操作数前面,并转换操作数的符号。

一元减操作符主要用于表示负数,例如将 1转换为 -1。

语法:

-a

实例

在将一元减操作符应用于数值的时候,该值会转换为负数。但是当应用于非数值的时候,一元减操作符遵循一元加操作符相同的规则,最后再将得到的数值转换为负值。

- ‘02‘;     // 值变成数值 -2
- ‘2.1‘     //值变成数值 -2.1
- ‘z‘        //值变成  NaN
- true     //值变成数值  -1
- 2.1       //值变成数值  -2.1

var a = {valueOf:function() {return -1;}}
a = - a;
 // 值变成数值  1


参考资料:

《JavaScript 高级程序设计》

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators

原文地址:https://www.cnblogs.com/nyw1983/p/12178784.html

时间: 2024-08-04 03:58:59

JavaScript 算数运算符的相关文章

0102 运算符(操作符):分类、算数运算符

1.运算符(操作符) 1.1 运算符的分类 运算符(operator)也被称为操作符,是用于实现赋值.比较和执行算数运算等功能的符号. JavaScript中常用的运算符有: 算数运算符 递增和递减运算符 比较运算符 逻辑运算符 赋值运算符 1.2 算数运算符 算术运算符概述 概念:算术运算使用的符号,用于执行两个变量或值的算术运算. 浮点数的精度问题 浮点数值的最高精度是 17 位小数,但在进行算术计算时其精确度远远不如整数. 所以,不要直接判断两个浮点数是否相等 ! var result =

(4)javascript的运算符以及运算符的优先级

                                运算符的使用方法 在javascript的程序中要完成各种各样的运算,是离不开运算符的. 在javascript中,按运算符类型可以分为算术运算符.赋值运算符.比较运算符.逻辑运算符.条件运算符等. ( 图片来自于W3School离线手册) 算术运算符案例: <!doctype html> <head> <meta http-equiv="content-type" content="

Java的算数运算符、关系运算符、逻辑运算符、位运算符

Java的运算符,分为四类:                           算数运算符.关系运算符.逻辑运算符.位运算符.                           算数运算符:+  -  *  /  %  ++  --                           关系运算符:==  !=  >  >=  <  <=                           逻辑运算符:&&  ||  !  ^  &  |        

shell运算符之 关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符

shell运算符有很多,关系运算符,算数运算符,布尔运算符,字符串运算符和文件测试运算符 1,算术运算符 原声bash 不支持简单的算术运算,可以使用expr 工具 两点注意: 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样. 完整的表达式要被 ` ` 包含,注意这个字符不是常用的单引号,在 Esc 键下边. #!/bin/basha=10b=20rst=`expr 2 + 2`echo '2+2 =' ${rst} rst=`exp

Shell运算符:Shell算数运算符、关系运算符、布尔运算符、字符串运算符等

Bash 支持很多运算符,包括算数运算符.关系运算符.布尔运算符.字符串运算符和文件测试运算符. 原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用. 原生的bash到底支持不支持数学计算我不清楚了,不过也这样做到一样的效果: #!/bin/bash val=$(( 2 + 2)) echo 'Total value :'$val val=$[ 2 + 2 ] echo 'Total value :'$val 我想现在版本的bash原生是支

基本算数运算符和基本语句之赋值语句

基本的算术运算符    常用算数运算 常用算数运算符包括+(正好运算符).-(负号运算符).+(加法运算符).-(减法运算符).*(乘法运算符)./(乘法运算符).%(求余运算符). 注意: l   键盘无÷号,所以以/代替,实数相除的结果是双精度实数,两个正整数相除的结果为整数,即舍弃小数部分.若除数与被除数中有一个数是负数,则结果是不一定,是一个随机数. l   %运算符要求参加运算的运算对象(即操作数)为整数,结果也是整数. 自增自减运算符. 自增自减运算符可以分为前置和后置两种,首先先谈

javascript算术运算符详解

算术运算符 +.-.*./.%.++.-- ++.--分为前缀形式和后缀形式 前缀形式先加减1在执行 后缀形式先执行再加减1 注意 +号用来连接两个字符串 只要+连接的操作数中有一个是字符串型,JS就会自动把非字符串型数据作为字符串型数据来处理 JS代码的执行顺序是从左到右,所以在+连接的表达式中,遇到字符串型数据之前,所有出现的数值型数据(或者可以自动转换为数值型的数据)仍被作为数值来处理.为了避免这种情况,我们可以在表达式前拼一个空字符串 实例 <!DOCTYPE html> <ht

C语言:算数运算符

算数运算符顾名思义就是进行运算的符号 + 加法运算符 - 减法运算符或负值运算符 * 乘法运算符 / 除法运算符 % 模运算符或称取余运算符,要求%两侧均为整型数据 算术表达式:用算数运算符降数据连接起来的式子,称为算数表达式,例如:a+b.10/5等,如果表达式复杂的话,就要注意下运算的顺序,运算的顺序是按照运算符的结合方向和优先级进行的. 结合方向 算术运算符的运算方向是从左向右.例如表达式2+3+4,先计算2+3 优先级 优先级越高,就越先结合,此时并没有参与运算仅仅是操作符与操作数结合到

算数运算符

一.按照功能分为四种: 1.算数运算符 单目:+(取正)-(取负) ++(自增1) - -(自减1). 双目:+ - * / %(取余)(+还可以连接字符串). 三目:a>b?true:false 例子: int a=2,b=3; int c; c=a+b; c=a-b; c=a/b; c=a%b; a>b?a:b; 2.位运算符(先转化成二进制再进行运算) 与(&).非(~).或(|).异或(^).移位运算符:<<. >>(有符号右移) . >>&