Javascript中的运算符大多是由标点符号少数由关键字表示。可以根据其操作数的个数进行分类.大多数运算符是一个二元运算符,将两个表达式合成一个比较复杂的表达式。还有需要注意的一点是运算符的优先级,它控制着运算符的执行顺序,优先级高的运算符的执行总是优先于运算符低的运算符。进行以下大致的分类:

一、算术运算符

  算术运算符包括一元算术运算符和二元算术运算符两种。

  1、一元运算符

    一元算术运算符包括一元加法(+)、一元减法(-)、递增(++)和递减(--)。只对一个表达式执行操作,并产生一个新值。

  +/-:一元加减运算符

    一元加法运算符把操作数转换为数字或者是NaN(用函数Number());

    一元减法运算符它会根据需要把操作数转换为数字,然后改变运算结果的符号。

     所以可以看出一元的加和一元减运算符主要用于基本的算术运算,也可以用于转换数据类型

<script>
var a=25;
var b='1.1';
var c=false;
var d=1.1;
var e=NaN;
var f=undefined; a=+a;
b=+b;
c=+c;
d=+d;
e=+e;
f=+f;
a1=-a;
b1=-b;
c1=-c;
d1=-d;
e1=-e;
f1=-f;
console.log(a,b,c,d,e,f);//25 1.1 0 1.1 NaN NaN
console.log(a1,b1,c1,d1,e1,f1);//-25 -1.1 -0 -1.1 NaN NaN
</script>

   ++/--:递增和递减

    运算符对其操作数进行加1或者是减1的操作,操作数是一个左值(value)。运算符将操作数转换为数字,然后给数字加1或者是减1,并将加1或减1后的数值重新赋值给变量,数组元素或者对象属性。

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

    如果只操作自己:++放在前面还是后面是一样的,让自己加1;

            --放在操作符的前面或者后面是一样的,让自己减1;

    如果是操作别人(在赋值给其它的变量):

      ++放在后面,先把自己赋值给另外一个变量,自己再加1;++放在前面,先把自己加1赋值给另外一个变量,然后自己再加一个1;

      --放在后面,先把自己赋值给另外一个变量,自己再减1;--放在前面,先把自己减1然后赋值给另外一个变量,然后自己再减一个1;

    不管是前增还是后增,这个运算符通常用在for循环中,用于控制循环内的计数器

 <script>
var n = 10;
var b = 20;
n++; //11
n--; //10
b--; //19
--b; //18
//console.log(n,b); var c1=1; //2
var d1=c1++; //1
var c2=1; //2
var d2=++c2; //2
console.log(c1,d1,c2,d2); var e1=0; //-1
var f1=--e1; //-1
var e2=0; //-1
var f2=e2--; //0
console.log(e1,f1,e2,f2);
</script>

  2、二元运算符

    二元运算符包括+,-,*,、/,%(求余)

    加法(+):

      在多数的程序设计语言中,加法通常是简单的数字运算符,但在Javascript中,加法可以进行数字和数字的相加,也可进行字符串的相加。所有其它类型的值都会自动转换成这两种类型的值(这其中涉及到隐式类型的转换,toNumber()将值转换为数字,toString()将值转换成字符串)。

      遵循如下的规则:

        如果其中一个操作数是对象,则对象会转换成原始值,日期对象通过toString()进行转换,其它对象能过valueOf()方法进行转换。由于多数对象valueOf()方法无法返回一个原始值,所以还是通过toString()方法来执行转换,转成一个字符串;

        【注意】:除了单数值数组会转换为数字外

        在进行了对象到原始值的转换后,如果其中一个操作数是字符串,另一个操作数也会转换成字符串,进行字符串连接;否则,两个操作数都将转换成数字或NaN,进行加法操作。

      知识点回顾:

        在Javascript有两种类型的值:原始值(primitives):undefined, null, boolean, number,string        对象(object):Array, function

        从上面在原则中我们可以看出加法运算会触发三种类型的转换:转为原始值,转为数字,转为字符串。

        转原始值能过ToPrimitive()方法:如果是一个原始值,则直接返回,如果是一个对象,则用obj.value()方法,如果返回的是原始值,那就是这个原始值,如不是调用obj.toString()方法,如果返回值是一个原始值,那就返回这个原始值,再不是那就是抛出异常。

 <script>
var a = 1;
var b = '';
var c = '1';
var d = [1, 2];
var e = NaN;
var f = undefined;
var g = false;
var h = {
valueof: function () {
return vuleof;
}
}
var n=[2];
var m=null; //原生对象转成字符串
console.log(a, a + b); //1 "1"
console.log(a, a + c);//1 "11"
console.log(a, a + d);//1 "11,2"
console.log(a, a + e);//1 NaN
console.log(a, a + f);//1 NaN
console.log(a, a + g);//1 1
console.log(a, a + h);//1 "1[object Object]"
console.log(a+new Date());// 1Wed Nov 06 2019 10:04:45 GMT+0800 (中国标准时间) //特例:单数值组和valueof()返回为数值的自定义对象会转换为数值
console.log(a,a+n); //1 "12"
//如果进行算术加法,undefined转换成'undefined',null转换成'null',false转换成0,true转换成1
console.log(f+f); //NaN
console.log(e+e); //NaN
console.log(g+g); //0 //如果进行字符串连接,undefined转换成'undefined',null转换成'null',false转换为'false',true转换为'true'
console.log(c+d);
console.log(c+e);
console.log(c+f);
console.log(c+g);
console.log(c+m);
//所以利用加号运算的特性,可以+任意的字符串

    减法(-):

      减法的话只涉及到数字的减法运算,使用Number()转型函数将非数值类型转为数值或者是NaN.

  <script>
// undefined转换为NaN,null转换为0,false转换为0,true转换为1
console.log(1-{});//NaN
console.log(1-[]);//1
console.log(1-[1,2]);//NaN
console.log(1-NaN);//NaN
console.log(1-undefined); //NaN
</script>

    乖法(*):

      用于计算两个数值的乖积,会通过Numbe()方法将非数值转换成数值或者是NaN.

 <script>
console.log(1*{});//NaN
console.log(1*[]);//0
console.log(1*[1,2]);//NaN
console.log(1*NaN);//NaN
console.log(1*undefined); //NaN
</script>

    除法(/):

    执行第一个操作数除以第二个操作数的运算,通过Number()转型将非数值类型转换为数值或NaN

<script>
console.log(1/{});//NaN
console.log(1/[]);//Infinity
console.log(1/[1,2]);//NaN
console.log(1/NaN);//NaN
console.log(1/undefined); //NaN
</script>  

    求模(%):

      取模的时候如果前面的数字比后面的小,那得到的值就是前面的数字,求模结果与第一个操作数的符号保持一致,前面的数字为infinity,后面的数字为0时,结果为NaN。

<script>
console.log(3%5);//3
console.log(-5%1);//0
console.log(1%{});//NaN
console.log(1%[]);//Infinity
console.log(1%[1,2]);//NaN
console.log(1%NaN);//NaN
console.log(1%undefined); //NaN
</script>

      

  

    

 

js之运算符(算术运算符)的更多相关文章

  1. PHP中的运算符---算术运算符、逻辑运算符、赋值运算符、比较运算符

    1.算术运算符 常见的算术运算符 运算类型 运算符 举例 结果 取反运算 - -$a 返回$a的负值 加法运算 + $a + $b 返回$a与$b的和 减法运算 - $a - $b 返回$a与$b的差 ...

  2. javascript运算符——算术运算符

    × 目录 [1]一元加 [2]一元减 [3]递增[4]递减[5]加法[6]减法[7]乘法[8]除法[9]求余 前面的话 javascript中的算术操作主要通过算术运算符来实现,本文将介绍算术运算符的 ...

  3. Python新手学习基础之运算符——算术运算符

    算术运算符 之前文章在介绍变量类型的时候,其实已经用过了很多算术符,比如+.-.*././/.** 等,除此之外,还有一个符号是之前内容没提到的,就是 % ,用来返回除法余数的运算符号. 假设有变量x ...

  4. 正经学C#_表达式与其运算符[算术运算符]:《c#入门经典》

    表达式:正如字面意义,它是通过算术运算符来进行运算的数学公式.表达式的意义我们都是很明白的,大白话就是一个公式嘛.不是很难懂. 表达式不是一个单独的存在,必然有操作数或者操作符的.在c#中有操作符有很 ...

  5. java入门---运算符&算术运算符&自增自减运算符&关系运算符&位运算符

        计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 ...

  6. 初识JS 基本语法.基本运算符

    JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...

  7. Python--前端基础之JavaScript(JS的引入方式,JS的变量、常量和标识符,JS的数据类型,运算符,流程控制,JavaScript的对象)

    JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...

  8. java中的算术运算符、赋值运算符、比较运算符、逻辑运算符、条件运算符

    一.算术运算符 算术运算符主要用于进行基本的算术运算,如加法.减法.乘法.除法等. Java 中常用的算术运算符: 其中,++ 和 -- 既可以出现在操作数的左边,也可以出现在右边,但结果是不同滴 例 ...

  9. Python算术运算符

    Python 运算符 什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 . 例子中,4和5被称为操作数,"+"号为运算符. Python语言支持 ...

  10. java基础知识-算术运算符和赋值运算符

    1.算术运算符 算术运算符: +,-,*,/,% /:取的是两个数的商,当两个数是整数,不整除的情况,结果不包含小数部分 %:取的是两个数的余数. 字符串和+联合使用:此时的+称为连接符.++,--都 ...

随机推荐

  1. centos7编译安装Python 3.6.8 后用pip3出现SSL未配置问题(import ssl失败)解决方法

    下载源码编译安装openssl https://www.openssl.org/source/openssl-1.0.2j.tar.gz ./config --prefix=/usr/local/op ...

  2. venv转向pipenv

    先编译安装你需要的Python版本:参考https://www.cnblogs.com/zxpo/p/10011871.html python3.6安装在:/usr/bin/python3.6目录下: ...

  3. Python:目录

    ylbtech-Python:目录 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtec ...

  4. dpkg软件包管理

    要想得心应手管理Ubuntu软件包,就必须熟悉其中最重要的软件包管理程序dpkg工具是Ubuntu软件包管理工具的基础.使用dpkg工具可以实现软件包的安装.卸载.查询.编译.打包等功能. dpkg( ...

  5. JAVA多线程程序ProgressBar

    JAVA多线程程序ProgressBar 题目简介: 思维导图: 实验代码:建议先看CalThread类,计算线程的实现,再作基本CalFrame类的界面, 然后作ReadThread类,结合CalF ...

  6. for...in 与 for...of

    在js中, 对于Object,一般for...in 来进行迭代,不能使用for...of     // let obj = {a:1,b:2} for(let i of obj){console.lo ...

  7. jmeter beanShell修改http请求参数

    jmeter beanShell修改http请求参数 在使用jmeter进行测试时,需要对上一步响应的明文参数,如userName='tom' token='%sdf%sdkdfj'之类的参数,加密一 ...

  8. Linux 如何上传/下载文件

    注: 如果在操作中,提示没有权限请使用" su - "命令来切换当前账号至" root " 账号 一 .    使用 rz / sz 命令 1 .  登陆 Li ...

  9. Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence)

    Leetcode之动态规划(DP)专题-392. 判断子序列(Is Subsequence) 给定字符串 s 和 t ,判断 s 是否为 t 的子序列. 你可以认为 s 和 t 中仅包含英文小写字母. ...

  10. TensorFlow实战第四课(tensorboard数据可视化)

    tensorboard可视化工具 tensorboard是tensorflow的可视化工具,通过这个工具我们可以很清楚的看到整个神经网络的结构及框架. 通过之前展示的代码,我们进行修改从而展示其神经网 ...