JavaScript高级程序设计(第3版)学习笔记4 js运算

在ECMAScript中,有非常丰富的运算符和操作符,在这篇文章中将按通常的分类来稍微整理一下,不过在整理之前,先说明一下:

1、虽然标题是运算符和操作符,然而在我看来并没有多少严格区分的必要,在英文中,貌似也是用一个Operator来表示,所以在下文中我可能会混用。甚至,一些不属于运算符和操作符范畴的,我也整理在这里,只要我觉得必要。

2、对于运算符的优先级,你无需一一牢记——我相信你知道最简单的”先乘除,后加减”,至于其它的,如果你不确定,加上括号好了。在ECMAScript中,优先级相同的从左向右运算。

3、对于一些编程语言通用的运算符,比如常用算术运算符(+-*/),我只会简单的列举一下,不会展开,但是请注意,并不是说这些不重要,相反,这些通用运算符甚至处于一个非常基础的地位,只是我觉得你应该早已经熟悉,没必要在这里花时间强调。

4、那么,这里重点关注什么呢?就是一些在ECMAScript中比较特殊的操作符,或者我认为值得花时间强调的一些地方。

运算符与操作符

类别   操作符    描述   说明  
一元操作符   ++    自增1  

1、自增(减)有前置和后置两种类型,前置先自增(减)再参与其它运算,后置先参与其它运算再自增(减)。

2、在ES中,自增(减)不仅适用于整数,它们可以作用于任意值,对于不是Number类型的值,会先按前一篇文章中的规则隐式转换为Number,然后再自增(减),此时变量类型也会变成Number类型。

 
--    自减1  
+    一元加   一元加最主要的应用就是将操作数转变为Number类型,相当于调用Number()转换。   
-    一元减   一元减则是在一元加的基础之上再取其相反数。  
算术操作符   +    加  

1、除了加(+)之外,如果操作数不是Number类型,会自动调用Number()转换为Number类型再进行计算。

2、对于加减(+-),除了作为算术运算符。还可以作为一元操作符(见上)。当然,由于字符串操作中对加号(+)的重载,还可以用于将任意数值(的字符串)相连,这也是第1点中为什么要除了加(+),它在含有非Number类型值时,会将所有操作数转换为字符串相连接。

3、与一般类C语言不同,在ES中,除(/)和取模(%)并不会区分整数和浮点数,比如 5 / 2 = 2.5 而不是2,5.3 % 3 = 2.3 而不是2。

4、任意运算,只要操作数含NaN,结果就是NaN。但并不是结果为NaN就一定有一个操作数为NaN,比如0/0也返回NaN。

5、对于含无穷Infinity的运算,规定比较多,这里就不列举了,可以参考原书,或者自行测试。

 
-    减  
*    乘  
/    除  
%    取模  
逻辑操作符

(布尔操作符)

  !    逻辑非  

首先将操作数转换为Boolean类型值,然后再取反。可以使用双重非!!将一个数值转换为相应的Boolean值。 

 
&&    逻辑与  

1、当两个操作数相应的Boolean值均为true时,返回true

2、短路:当第一个操作数相应的Boolean值为false时,会直接返回false,不会再计算第二个操作数。这常常被应用在判断一个变量(属性)是否有定义,如:
if(object && object.name && object.name = 'linjisong'){ }
 这里会首先判断object存在,不存在的话就不会解析object.name从而阻止错误的发生,同样,也只有object.name存在,才会去比较这个值。

 
||    逻辑或  

1、当两个操作数相应的Boolean值至少有一个为true时,返回true

2、短路:当第一个操作数相应的Boolean值为true时,会直接返回true,不会再计算第二个操作数。

3、逻辑或,除了用于一般的判断之外,还常常被应用在提供默认值的情况,如:

function Fn(obj){
   obj = obj || {};
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wddsgg.html