计算机被发明的初衷仅仅是为了快速实现一些数学计算,然而经过多年发展,计算机已经不单单能实现快速计算这么简单的工作了,现代计算机不仅能够进行数值的计算,还能进行逻辑计算,还具备存储记忆功能,是能够按照程序运行,自动、高速处理海量数据的现代智能电子设备,俨然已经成了我们生活的必需品。有兴趣的同学可以去北大公开课听一听《计算概论A》的前几节课。

  即使计算机已经发展至此,但它工作的本质还是计算。然而计算就必然涉及到运算符,这就引出了我们今天的主题,JavaScript中的操作符。

一     JavaScript中的算术运算符

  和数学运算一样,JS中也包括+(加)、-(减)、*(乘)、/(除)、%(模,即取余)。

  唯一不同的是=(等号),在数学中是表示两个相等的一种关系判断符号,而在JS中,它表示赋值运算,可以认为它的功能是把左边变量的值设置为右边提供的值(也可以是表达式计算后的值)。

  赋值运算的表达式是:变量 = 值/表达式。

  而JS中的等于符号是“==”和“===”,稍后将详细说明他们的区别。

  另外,JS中数字的表达是有范围的,5e-324 ----- 1.7976931348623157e+308之间。可以使用Number.MIN_VALUE和Number.MAX_VALUE查看。超出这个范围将显示-infinity或infinity。

  

  1、+(加)

   a: 如果操作数都是数值,则执行数学运算

   b:如果任意一个操作数是NaN,则返回NaN

    c:infinity + infinity = infinity

    d:(-infinity) + (-infinity) = -infinity

   e:infinity + (-infinity) = NaN

    f:如果有任意一个操作数是字符串,则先把另一个转换成字符串,然后拼接

  

  2、-(减)

  a: 如果操作数都是数值,则执行数学运算

  b:如果任意一个操作数是NaN,则返回NaN

   c:infinity - infinity = NaN

  d:(-infinity) - (-infinity) = NaN

  e:infinity - (-infinity) = infinity

  f:-infinity - infinity = -infinity

  

  3、*(乘)

   a:如果操作数都是数值,则执行数学运算

  b:如果任意一个操作数是NaN,则返回NaN

  c:infinity * 0 = NaN

   d: infinity乘以任何非零操作数,都返回infinity,正负取决于非零操作数的正负

  e:infinity * infinity = infinity

      f:如果操作数不是数字,那么JS会先把它转换成数字,然后再应用上面的规则

  

  4、/(除)

   a: 如果操作数都是数值,则执行数学运算

   b:如果任意一个操作数是NaN,则返回NaN

  c:infinity / infinity = NaN

    d: 0 / 0 = NaN

    e:任何非0的有限数除以0,都返回infinity,正负取决于非零操作数的正负

     f: 0除以任何数都等于0

    g:任何有限数除以infinity都返回0

      h:如果操作数不是数字,那么JS会先把它转换成数字,然后再应用上面的规则

  

  5、%(模)

    a:如果操作数都是数值,则执行数学运算

    b:如果任意一个操作数是NaN,则返回NaN

    c:如果被除数是infinity,则返回NaN(另一个操作数是有限数)

    d:如果除数是infinity,则返回被除数(另一个操作数是有限数)

    e: 0除以任何数都余0

    f:如果操作数不是数字,那么JS会先把它转换成数字,然后再应用上面的规则

  详细情况可以参考《JavaScript高级程序设计(第三版)》的运算符章节。

二     JavaScript的复合运算

1、+=

a += 1 等同于 a = a + 1

2、-=

a -= 1 等同于 a = a – 1

3、*=

a *= 1 等同于 a = a * 1

4、/=

a /= 1 等同于 a = a / 1

5、%=

a %= 1 等同于 a = a % 1

6、++

a++ 等同于 a = a + 1

7、--

a— 等同于 a = a – 1

  需要注意的是:自增(++)和自减(--)出现的位置决定了变量是先取值,还是先计算。

  符号出现在变量之前,则先计算,之后则先取值。

 var a = 0;
console.log(a++);//
console.log(++a)//

三     JavaScript的比较运算(关系运算)

1、>(大于)

2、<(小于)

3、>=(大于或等于)

4、<=(小于或等于)

5、==(等于)不关注数据类型,比较值前会进行类型转换,保证数据类型统一

6、===(绝对等于)数据类型和值都相等才成立

  注意:连续比较运算时,从左往右依次比较。(这里涉及到隐式类型转换,每次比较会得到true或者false,调用Number(),再和下一个数字比较)最后返回true或false。

 var a = 1;
console.log(0 < a < 2);//true
console.log(0 < a == 1);//true
console.log(0 > a < 1);//true

  关于数据类型的转换,会专门用一节来讲解。

  比较运算的规则如下:

   a:都是数字,正常比较

   b:都是字符串,比较字符串编码值

   c:如果一个是数字,则另一个将被转换为数字再比较

   d:如果一个是布尔值,则会先转换成数字再比较

   e:如果一个是对象,则先调用它的valueOf()方法,得到返回值再应用上面的规则。如果对象没有此方法,则调用toString()方法。

  这两个方法将在以后介绍对象时详细讲解。

四     JavaScript的逻辑运算和三目运算

1、逻辑运算

a:逻辑与(&&),有一个条件为假则为假,返回false

 var num = parseInt(prompt("please enter a number:"));
if(num >= 0 && num <=10){
alert("yes,this number is between 0 and 10.");
}
//只有当数字既瞒足“num >= 0”又满足“num <= 10”时才会弹出提示框

b:逻辑或(||),有一个条件为真则为真,返回true

 var num = parseInt(prompt("please enter a number:"));
if(num < 0 || num >10){
alert("yes,this number is not between 0 and 10.");
}
//只要num满足其中一个条件就会弹出提示框了

如果逻辑运算两边不是比较运算表达式,而是两个原始值,那么:与运算将返回第一能被Boolean()转换成false的项,或运算将返回第一个能被Boolean()转换成true的项。

 var a = 0,b = "a";
a && b;//
a || b;//"a"

     c:逻辑非(!),取反

 var myBoolean = true;
console.log(!myBoolean);//false //用逻辑非可以判断某个东西是否存在,比如某对象的属性。 var myObj = {
name:"ren",
age:"12"
};
console.log(myObj);//{name: "ren", age: "12"}
if(!myObj.sex){
myObj.sex = "male";
}
console.lof(myObj);//{name: "ren", age: "12", sex: "male"}
//可以看到,第二次打印是多了一个sex属性,它的值为male

  2、三目运算

表达式1?表达式2:表达式3;

判断表达式1是否为真,若是则返回表达式2,否则返回表达式3

 var num = parseInt(prompt("please enter a number:"));
if(num == 0){
alert("this number is 0.");
}else{
num < 0?alert("this is a negative number."):alert("this is a positive bumber");
}
//当输入数字小于0时会弹出“this is a negative number.”,大于0时会弹出“this is a positive bumber”

另外JavaScript也提供了位运算符,但个人觉得工作中用的不多,至少我到现在还没用过,所以这里就不列出来了,有兴趣的同学也可以自行上网查阅,推荐MDN和《高程》。

五  运算符优先级

  运算符的优先级决定了表达式中运算执行的先后顺序,优先级高的运算符最先被执行。

  运算符优先级的列表请参照MDN运算符优先级,这里就不搬过来了。

JavaScript之操作符的更多相关文章

  1. 从头开始学JavaScript (五)——操作符(二)

    原文:从头开始学JavaScript (五)--操作符(二) 一.乘性操作符 1.乘法:*      乘法操作符的一些特殊规则: 如果操作数都是数值,按照常规的乘法计算,如果乘积超过了ECMAscri ...

  2. 从头开始学JavaScript (四)——操作符

    原文:从头开始学JavaScript (四)--操作符 一.一元操作符 1.自增自减操作符:分为前置型和后置型: 前置型:++a;--a; 后置型:a++;a--; 例: <script typ ...

  3. 坑:JavaScript 中 操作符“==” 和“===” 的区别

    标题:JavaScript 中 操作符"==" 和"===" 的区别 记录一些很坑的区别: 1. '' == '0' // false 0 == '' // t ...

  4. JavaScript中+操作符的特殊性

    在JavaScript中+操作符有两个作用: (1)加法运算 (2)字符串连接 在使用+操作符进行运算时,当+操作符两边都是数值类型的时候,进行加法运算; 当+操作符两边有任意一边是字符串,则进行字符 ...

  5. JavaScript 逗号操作符

    让我们从一个有趣的微博开始吧. 末尾的c是优先级最低的逗号操作符.逗号操作符是操作符优先级的最后一行,并且很少有文章记录,它隐藏着它的锋芒.它可能不是JavaScript强势操作符,但是我喜欢它.它简 ...

  6. JavaScript剩余操作符Rest Operator

    本文适合JavaScript初学者阅读 剩余操作符 之前这篇文章JavaScript展开操作符(Spread operator)介绍讲解过展开操作符.剩余操作符和展开操作符的表示方式一样,都是三个点 ...

  7. 细说javascript typeof操作符

    细说javascript typeof操作符 typeof定义 typeof是一元运算符,用来返回操作数类型的字符串.下面是ECAMScript5.1关于typeof的标准定义: NOTE:上面表格标 ...

  8. 初识JavaScript 变量, 操作符, 数组

    这里讲的不会太多, 因为所有的语言都是一样的, 一些基本的东西, 所以就随便写写. 变量 变量就是可变的量, 编程角度理解就是用于存储某种/某些数值的存储器. 我们可以把变量具象理解为一个盒子, 而我 ...

  9. Javascript 布尔操作符总结

    在一门编程语言中,布尔操作符的重要性堪比相等操作符.如果没有测试两个值关系的能力,那么诸如if...else和循环之类的语句就不会有用武之地了.在像javascript这样弱类型语言更有其妙用,让我们 ...

  10. JavaScript 比较操作符,严格比较===

    JavaScript 有两种比较方式:严格比较运算符和转换类型比较运算符.对于严格比较运算符(三个 =)来说,为ture的情况是仅当两个操作数拥有相同的类型,而对于被广泛使用的比较运算符(两个 =)来 ...

随机推荐

  1. 类spring ioc 泛型保留

    类spring ioc 泛型保留 什么是泛型擦除 Java并不会传递泛型类,举个直观的栗子: @Component public class BaseProvider<T> { publi ...

  2. NanoPi NEO2 学习笔记 1:安装系统、首次开机和一些设置

    初识NEO2 前几天搞到了一块NanoPi NEO2,A53的核心,512M内存,一个千兆网口,非常小的体积,质量也不错,非常满意,140元的价格可以买到这样一块ARM开发板也是非常划算了,非常适合低 ...

  3. linux安装man中文手册并保留英文man手册

    大家都知道学习linux系统,查找man手册帮助是非常重要的,然而默认linux的man手册是英文文档,快速阅读英文man固然重要,不过配置好中文man也可以让自己更快速地学习!当然英文学习大家还是不 ...

  4. 我常用的一些linux命令

    之前做过两年的运维,用过很多命令,深切体会到某些linux命令熟练掌握后对效率提升有多大.举个简单的例子,在做了研发后经常会有跑一些数据,对于结果数据的处理,我们的产品同学一般都习惯于用excel做统 ...

  5. python程序中使用MySQL数据库

    目录 python程序中使用MySQL数据库 1 pymysql连接数据库 2 sql 注入 3 增删改查操作 4 pymysql使用总结 python程序中使用MySQL数据库 1.python中使 ...

  6. Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree)

    Leetcode之深度优先搜索(DFS)专题-559. N叉树的最大深度(Maximum Depth of N-ary Tree) 深度优先搜索的解题详细介绍,点击 给定一个 N 叉树,找到其最大深度 ...

  7. 微软发布了开发社区采用.NET Standard的最新信息

    最近,微软发布了开发社区当前采用.NET Standard的最新信息..NET Standard是API的正式规范,现有.NET实现在不同平台的是通用的(从而允许跨平台开发).当前规范(版本2.0)在 ...

  8. ES6之解构

    1.ES6允许按照一定的模式,从数组中和对象中提取值,对变量进行赋值,这种称为解构(Distructuring): let [a,b,c] = [3,5,6];// 相当于 a=3,b=5,c=6 本 ...

  9. javascript语言精粹数组篇之Array的方法注意事项

    本文并没有详细列出Array方法详解,本文侧重点在于使用Array编程时候要注意的问题.1.Array.concat var o = {name:"Gavin"}; var a1 ...

  10. atcoder D - Game on Tree(树形dp+尼姆博弈)

    题目链接:http://agc017.contest.atcoder.jp/tasks/agc017_d 题解:简单的树上的尼姆博弈,这个应该看的出来然后就是简单的树形dp然后异或一下就行. #inc ...