操作符:一元操作符、布尔值操作符(逻辑操作符)、加性操作符、乘性操作符、关系操作符、相等操作符、条件操作符以及赋值操作符

操作符:ECMAScript的操作符适用于多种类型的值,包括适用于对象。但是在用于对象时需使用valueOf()或者调用toString()方法,来取得可以操作的值。

 

   1.一元操作符包括自增和自减以及一元加减操作符

     -自增

        在原变量的基础上+1,对原变量自增后原变量立即增加1。

        写法:a++  或 ++a         两者对于原变量的作用一样,但是值不一样.

                   a++ 的值为自增加前的值,即原值;  ++a 的值为自增后的值,即新值;

var num1 = 2, num2= 4;
var num3 = num1++ + num2;  //输出 6 num1是没有增加前的
var num4 = num1 +num3 ;//输出9 num1已经完成了自增

      -自减同上

var num1 = 8, num2= 4;
var num3 = num1-- - num2; //输出4 var num4 = num1 -num3 ; //输出 3

      -一元加减操作符      一元即一个字面量

var  a = "0.1";
a = +a;//值变成数值0.1
a = -a;值变成数值-0.1

 可利用一元加操作符将字符转变为数值,与Number()的作用相同

 

 2.布尔值操作符(逻辑操作符)!非  || 或  && 与 

     ! 非 :任何值都会返回一个布尔值。其过程是首先将其操作数转化一个布尔值,然后进行取反

    遵循的规则是:(记忆时对于对象、非空字符串以及任意非0数值会返回true后进行取反。)

      对于对象、非空字符串以及任意非0数值(包括infinity 即正无穷)会返回false

     对于空字符串、数值0、null、NaN以及undefined会返回true

 注意:

           a =!!a;  取两次就是原值,为隐性转换数据类型为Boolean

 

   ||  或 :由两个操作数组成,如果第一个操作数返回true则结果返回true;如果第一个操作符返回false则结果返回false;

    遵守的规则是:

     对于第一个操作数为对象则返回 第一个操作数

    对于第一个操作数求值为false则返回第二个操作数

   对于两个操作数都是null,则返回null 

   对于两个操作数都是undefined,则返回undefined

   对于两个操作数都为NaN,则返回NaN

 

&& 与 逻辑与是一个短路操作。只有两端同时为true才返回true(第二个操作数)。当第一个操作数是false时,则返回第一个数不再检查第二个数。

    遵守的规则是:

  对于第一个操作数是对象,则返回第二个操作数

 对于第一个操作说是null,则返回null

 对于第一个操作数是NaN,则返回NaN

 对于第一个操作是undifined,则返回undifined

 

3.加性操作符

 加号  +

   如果两个操作数为数值,执行常规的加法计算,根据下列规则返回:

    如果有一个操作数为NaN,则返回NaN

    如果是Infinity加Infinity,则返回Infinity

    如果是Infinity加-Infinity,则返回-Infinity

    如果是-Infinity加-Infinity,则返回NaN

    如果+0 加 +0 .则返回 +0

   如果 +0 加-0 ,则返回+0

   如果-0 加-0 ,则返回-0

   如果两个操作数为字符串,执行拼串操作

   如果两个操作符其中一个是字符串,则将其他数据类型的操作数转换为字符串后,再进行拼串

var a = 12,b = "11";
 var c = a+b ;//返回1211

  

减号 -

与加号类似,但是稍有不同

遵循的规则为:

如果两个操作数为数值,则执行常规运算

如果有一个操作数为NaN,则返回NaN

如果Infinity减Infinity,则返回NaN

如果-Infinity减-Infinity,则返回NaN

如果Infinity减-Infinity,则返回Infinity

如果-Infinity减Infinity,则返回-Infiniy

如果是 +0 减 +0 则返回 +0

如果是 -0 减 +0 则返回 -0

如果是-0 减 -0 则返回+0

如果操作数为字符串,则先转换为数值,此处与加号有区别

如果操作数为对象,也是先转换为数值

 

4.乘性操作符  * /  %

 乘法 * 

操作数是数值,则执行数值计算。其中一个操作符有符号,那么结果就是负数。如果结果超出了ECMAScript数值的表示范围,则返回Infinity或-Infinity

有一个操作数为NaN,则结果是NaN

如果是Inifinty与0相乘,则结果是NaN  ;与非0数值想成,则返回Inifinity或者-Infinity,取决于有符号操作数的符号

如果是Infinity和Infinity相乘,则结果是Infinity

如果不是数值,则先转换为数值,按照前面的进行操作

 

除法 /

操作数是数值,则执行数值计算。其中一个操作符有符号,那么结果就是负数。如果结果超出了ECMAScript数值的表示范围,则返回Infinity或-Infinity

有一个操作数为NaN,则结果是NaN

如果是Infinity和Infinity相除,则结果是NaN

0和0相除,返回NaN

非零的有限数被0除,则结果是Infinity或-Infinity,取决于有符号的操作数

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

如果不是数值,则先转换为数值,按照前面的进行操作

 

% 取模

两者都是数值,按照除法计算,返回除得的余数

被除数是无穷大的值,除数是有限大的值,结果返回NaN

被除数是有限大的值,除数是无穷大的值,则结果是被除数

被除数是有限大的数值而除数是零,结果返回NaN

被除数是零,则结果是零

如果Infinity被infinity除,则结果是NaN

如果一个操作符不是数值,则后台调用Number()将其转化为数值,按照前面的规则计算

 

5.关系操作符 > <  >=  <=

操作的规则:

 两个操作数都是数值,则执行数值比较

 两个操作数都是字符串,则比较字符串对应的字符编码

 两者有一个是数值,则另一个也被转化为数值

 两者有一个是对象,则将其转化为字符串(valueOf()或者toString()),按照前面的方法进行比较

 两者有一个是布尔值,则将转化为数值,进行比较

 相等操作符  ==   !==    ===     !==

 有一个操作数为布尔值,将其转化为数值后,再进行数值比较

一个是字符串,另一个是数值,将字符串转换为数值后,再进行数值比较

一个是对象,另一个不是对象,使用valueOf()得到的基本数据类型后,按照前面的进行比较

注意:null和undifined是相等的

   在比较相等性前,不能将null和undefined进行转化

  有操作数为NaN,则返回false(两个都是NaN,也返回false,因为NaN不等于NaN)

 两个操作符为对象,两个操作数指向同一个 对象时,则返回true

=== 全等

 只在两个操作数未经转化前就相等的情况下,返回true

 

注意:由于相等和不相等存在类型转换问题,为了保持代码中数据类型的完整性,推荐使用全等和不全等

 

6.条件操作符(三元操作符)

 语法:条件表达式?语句1:语句2;      如果这个条件表达式为true,则返回输出语句1,是false则输出语句2  (注意语句之间的冒号)

var num1 = 1,num2=2;
var  max = num1 >num2? num1:num2;//输出2

  注:如果条件表达式为非布尔值,则先转换为布尔值

7.赋值操作符

 复合操作符

乘/赋值 *=   除/赋值 /=  模/赋值 %=   加/赋值 += 减/赋值 -= 

var num =1; 
num = num =2;


//可以这样写
var num = 1;
num += 2;

  

posted @ 2019-07-16 21:54  Evey1  阅读(390)  评论(0编辑  收藏  举报