JavaScript之操作符

时间: 2019-07-09阅读: 1135标签: 运算

写在前面:计算机被发明的初衷仅仅是为了快速实现一些数学计算,然而经过多年发展,计算机已经不单单能实现快速计算这么简单的工作了,现代计算机不仅能够进行数值的计算,还能进行逻辑计算,还具备存储记忆功能,是能够按照程序运行,自动、高速处理海量数据的现代智能电子设备,俨然已经成了我们生活的必需品

即使计算机已经发展至此,但它工作的本质还是计算。然而计算就必然涉及到运算符,这就引出了我们今天的主题,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++);//0
console.log(++a)//2


三     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:逻辑与(&&),有一个条件为假则为假

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:逻辑或(||),有一个条件为真则为真

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


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也提供了位运算符,但个人觉得工作中用的不多,至少我到现在还没用过,所以这里就不列出来了,有兴趣的同学也可以自行上网查阅

站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

链接: http://www.fly63.com/article/detial/4586

js中的位运算及用法

位运算是在数字底层(即表示数字的 32 个数位)进行运算的。由于位运算是低级的运算操作,所以速度往往也是最快的(相对其它运算如加减乘除来说),并且借助位运算有时我们还能实现更简单的程序逻辑,缺点是很不直观

理解JS 中相等和全等操作符比较规则

在日常的 JS 编码过程中,可能很难看到相等运算符(=)是如何工作的。特别是当操作数具有不同类型时。这有时会在条件语句中产生一些难以识别的 bug。很容易理解为什么 0 == 8 是 flase 。但是为什么{} == true是 false 的就看不出来了

JS解决加减乘除浮点类型丢失精度问题

当我们在前端使用js来执行运算时,会有丢失精度的问题。

Js es6中扩展运算符(...)

拓展运算符,是es6一个很好的特性,它们可以通过减少赋值语句的使用,或者减少通过下标访问数组或对象的方式,使代码更加简洁优雅,可读性更佳。下面我将列出拓展运算符的主要应用场景,以及相关知识。

JS判断素(质)数,并找出100~1000之间的所有素(质)数

素数:又称质数,即大于1,且只能被1和它本身整除的数,步骤构思:for遍历循环找其他约数,if设置满足条件(计数器从2开始,不包括它本身)有则中断输出

【leetcode】64. 条件求和,递归+移位运算

求 1+2+...+n ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。

(a == 1 && a == 2 && a == 3)为true,你所不知道的那些答案

看到这个标题,一部分同学的第一反应可能是,又是这个老套的问题,人家都讲过好多遍了你还讲。同学,你想错啦。我可不是在炒冷饭。今天我们要从这个问题,延伸出更多的知识,保证超出你的预期

Js算法:千位符号添加

给一个整数,每三位添加一个逗号展示。例如:1234 输出: 1,234。取模 1000,得后三位,依次取模。得到三位数字为元素的数组

有趣的 Js运算符用法

JavaScript 提供了几种运算符,可以用来对简单的值执行一些基本操作,如算术运算、赋值、逻辑运算、按位运算等。JavaScript 代码中赋值、算术和逻辑三种运算符经常会混合使用,但按位运算符就用得没那么多了。

为什么Js中 0.1+0.2 不等于 0.3 ?

在 js 中进行数学的运算时,会出现0.1+0.2=0.300000000000000004的结果,一开始认为是浮点数的二进制存储导致的精度问题,但这似乎不能很好的解释为什么在同样的存储方式下0.3+0.4=0.7可以得到正确的结果

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!