JavaScript ——操作符

布尔操作符

1. 逻辑非

由一个感叹号(!)表示,可以应用与ECMAScript中任何类型的值,最终会返回一个布尔值。

逻辑非操作符需要遵循下列规则:
  • 如果操作数是一个对象,返回false。

  • 如果操作数是一个空字符串,返回true。

  • 如果操作数是一个非空的字符串,返回false。

  • 如果操作数是数值0,返回true。

  • 如果操作数是null,返回true。

  • 如果操作数是NaN,返回true。

  • 如果操作数是undefined,返回true。

同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为,相当于只是使用了Boolean() 函数。

2. 逻辑与

逻辑与操作用两个和号(&&)表示,有两个操作数。使用如下列:

var result = true && false;        //false 

逻辑与的规则是当两个操作数都为真时它的返回值为真,其余情况为假。

逻辑与操作不一定返回布尔值,它遵循的规则如下:
  • 如果第一个操作数是对象,则返回第二个值。

  • 如果第二份操作数是对象,则只有在第一个操作数的值为真的情况下才会返回该对象。

  • 如果两个操作数都是对象,则返回第二个操作数。

  • 如果有一个操作数是null,则返回null。

  • 如果有一个操作数是NaN,则返回NaN。

  • 如果有一个操作数是undefined,则返回undefined。

  • 不能再逻辑与操作中使用未定义的值。

  • 逻辑与操作符是短路操作符,第一个操作数为false时,不会再去计算逻辑与操作符后面的值,直接返回false。

2. 逻辑或

逻辑或操作符有两个竖线符号(||)表示,有两个操作数。

逻辑或只要两个操作数中的其中一个为真的话,它的返回值就是真。

逻辑或中只要一个操作数不是布尔值,那么它的返回值也不一定是布尔值,逻辑或遵循如下规则:

  • 如果第一个操作数是对象,则返回第一个操作数。

  • 如果第一个操作数的布尔值为false,则返回第二个操作数。

  • 如果操作数都是对象,则返回第一个操作数。

  • 如果两个操作数都是undefined,返回undefined。

  • 逻辑或操作也是短路操作符,第一个操作数求值结果为true,就不会对第二个操作数求值了。

乘性操作符

乘性操作符包含乘法、除法、求模取余。

1 乘法

乘法操作符有一个星(*)号表示,用于计算两个数值的乘积。

乘法操作符遵循如下规则:

  • 如果操作数都是数值,执行常规的乘法计算,若其中有一个操作数有负号,那么返回结果为负数。如果乘积超过了ECMAScript的数值的表示范围,那么返回infinity或者-infinity。

  • 如果有一个操作数是NaN,则返回结果为NaN。

  • 如果是infinity与0相乘,则返回值为NaN。

  • 如果是infinity与非0数值相乘,则结果是Infinity或者-infinity。

  • 如果是infinity与infinity相乘,则结果是infinity。

  • 如果有一个操作数不是数值,则在后台调用number ()函数将其结果转换为数值然后引用上述的规则。

2 除法

除法操作符由一个斜线(/) 表示。

除法操作符遵循下列规则:

  • 如果有一个操作数是NaN,则结果是NaN。

  • 如果是infinity除以infinity,那么结果是NaN。

  • 如果是零除以零,结果是NaN。

  • 如果是非零的有限数被零除,那么结果是Infinity或者-infinity。

  • 如果是infinity被任何非零数除,则结果是infinity或者-infinity,这取决于有符号操作数的符号。

  • 如果有一个操作数不是数值,则在后台调用number()将它转换为数值然后应用上述规则。

3 求模

求模操作符由一个百分号(%)表示。

求模操作符遵循如下规则:

  • 如果操作数都是数值,执行常规的除法计算,返回余数。

  • 如果除数是无穷大值,被除数是有限值,返回NaN。

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

  • 如果infinity被infinity除,则结果是NaN。

  • 如果被除数是有限大的数值而除数是无穷的数值,那么返回值为被除数。

  • 如果被除数是零,则结果是零。

  • 如果有一个操作数不是数值,则在后台调用number()将其转换为数值,然后再应用上述规则。

加性操作符

1 加法

如果加法操作符的俩个操作数都是数值:

  • 如果有一个操作数 是NaN,则结果是NaN。

  • 如果是infinity和infinity,则结果是infinity。

  • 如果是-infinity和-infinity,则结果是-infinity。

  • 如果是infinity和-infinity,则结果是NaN。

  • 如果是零加零,则结果是零。

  • 如果是负零加负零,则结果为负零。

  • 如果是零加负零,则结果是负零。

如果其中一个操作数是字符串

  • 如果一个操作数都是字符串。则会将另一个操作数转换为字符串偿还,然后再见两个字符串串接起来。

  • 如果两个都是字符串,则将两个字符串串接起来。

  • 如果有一个操作数是对象,数值或者布尔值,则调用它们的toString()方法取得对应得字符串值。再应用上述规则。

  • 对于undefined和null,则分别调用String()方法取得对应的字符串值,在应用前面的字符串规则。

  • 对于undefined和null,则分别调用String()函数并取得字符串“undefined”和“null”。

2 减法

ECMAScript中的减法操作符在处理各种数据类型转换时,需要遵循的规则如下:

  • 如果俩个操作数都是数值,则执行常规的算术减法操作,并返回结果。

  • 如果有一个操作数是NaN,则结果是NaN。

  • 如果是Infinity减Infinity,则结果是NaN。

  • 如果是-Infinity减-Infinity,则结果是NaN。

  • 如果是Infinity减-Infinity,则结果是Infinity。

  • 如果是-Infinity和Infinity,则结果是-Infinity。

  • 如果是零减零,则结果是零。

  • 如果是零减负零。则结果是负零。

  • 如果是负零减负零,则结果是零。

  • 如果有一个操作符是字符串、布尔值、null或者undefined,则先在后台调用Number() 函数将其 转换为数值,然后根据前面的规则执行减法计算。如果转换的结果是NaN,则减法的结果是NaN。

  • 如果有一个操作数是对象,则调用对象的valueOf()方法以取得表示该对象的数值。如果得到NaN,则减法的返回值为NaN。若果没有valueOf()方法,则调用toString()方法,并将得到的字符串转换为数值。

关系操作符

关系操作符由小于(<), 大于(>),大于等于(>=),小于等于(<=)。

关系操作符相应的规则如下:

  • 如果两个操作数都是字符串,比较两个字符串对应的字符编码值。

  • 如果两个操作数都是数值,则执行数值比较。

  • 如果一个操作数是数值,另一个转换位数值,进行数值比较。

  • 如果一个操作数是对象,则调用这个对象的valueOf()方法,则调用toString() 方法,并将得到的结果根据前面的规则执行比较。

  • 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较。

相等操作符

相等操作符 分为两组:第一组 相等和不相等——先转换在比较。第二组 全等和不全等——仅比较而不转换。

1 相等和不相等

ECMAscript的相等操作符由两个等于号(==)表示,如果俩个操作数相等,则返回true。

ECMAscript的相等操作符由一个感叹号一个等于号(!=)表示,如果俩个操作数不相等,则返回true。

相等和不相等操作符遵循如下规则:

  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值。

  • 如果一个操作数是对象,另一个操作数是其他,那么调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。

  • null和undefined是相等的。

  • 要比较相等性之前,不可以将null和undefined转换为其它任何值。

  • 如果有一个操作数是NaN,则相等操作符返回false。不相等操作符 返回true。即使两个操作数都是NaN,相等操作符也会返回false。

  • 如果两个操作数都是对象,则比较它们是不是同一个对象,如果两个操作数都指向同一个对象,则返回true,否则返回false。

2 全等和不全等

全等由3个等于号(===)表示,它只有在两个操作数都未经转换的情况下返回true。

不全等操作符由一个叹号后跟两个等于号(!==)表示,它由两个操作数未经转换就不相等的情况下返回true。

null===undefined会返回false,因为他们不是同类型的值。

条件操作符

例如:var max=(num1>num2)?num1:num2;

这个表达式的意思是如果num1大于num2,则关系表达式返回true,将num1 的值赋给max;如果num1小于 num2,则关系表达式返回 false ,将 num2值赋给max 。

赋值操作符

由等于(=)号表示,作用是将右侧的值赋给左侧的变量。

复合赋值操作符如下:

  • 乘/赋值(*=);
  • 除/赋值(/=);
  • 模/赋值(%=);
  • 加/赋值(+=);
  • 减/赋值(-= );
  • 左移/赋值(<<=);
  • 无符号右移/赋 值( >>>=);
  • 有符号右移/赋 值( >>>=);

    逗号操作符

    作用1:声明多个变量。

 var num1=1,num2=2,num3=3;

作用2:用于赋值,赋值对于逗号操作符总是会返回表达式中的最后一项。

var num=(5,1,4,8,10);

猜你喜欢

转载自blog.csdn.net/qq_36647038/article/details/80377359