操作符

用于操作数据值的操作符,包括基本操作符,位操作符,关系操作符和相等操作符

一元操作符

只能操作一个值的操作符叫做一元操作符

  • 递增递减操作符

分为前置和后置型

var age = 20;
age ++;
++age;
age = age + 1;

var age = 20;
age --;
--age;
age = age - 1;

执行前置递增递减操作的时候,变量的值都是在语句被要求之前以前改变的-被称为副效应

var age = 20;
var sie = ++age + 2;
console.log(age,sie);// 21  23

执行后置递增递减操作的时候,变量的值是包含他们的语句之后执行的

var age = 20;
var sie = age++ + 2;
console.log(age,sie);// 21  22

先执行age+2,然后执行age++
  • 一元加和减操作符

    var num = 25;
    num = +num;// 25
    num = -num;// -25
    

位操作符

用于在基本的层次上,即是按照内存中表示数值的位来操作数值 对于特殊的NaN和Infinity值操作时,都会被处理成0

数值的转换过程:64位的数值先被转换为32位的数值,然后将32位转换回64位数值

按位非(NOT)

var age = 20;
var sie = ~age;
console.log(age,sie);// 20   -21
等同于
var age = 20;
var sie = -age - 1;
console.log(age,sie);// 20  -21

按位与(AND)

var age = 26 & 3;
console.log(age);// 2

按位或(OR)

var age = 26 | 3;
console.log(age);// 27

按位异或(XOR)

var age = 26 ^ 3;
console.log(age); 25

左移(<<)

var age = 2;
var si = age << 5;// 左移5位

有序号的右移(>>)

var age = 64 >> 5;
console.log(age);// 2

无序号的右移(>>>)

var age = 64 >>> 5;
console.log(age);// 2
console.log(-64 >>> 5);// 134217726

布尔操作符

布尔操作符一共有三个:非(NOT)、与(AND)和或(OR)

  • 逻辑非(!)

逻辑非操作符遵循以下规则: 如果操作符数是一个对象,返回false 如果操作数是一个空字符串,返回true 如果操作数是一个非空字符串,返回false 如果操作数的数值是0,返回true 如果操作数是null,返回true 如果操作数是NaN,返回true 如果操作数是undefined,返回true

  • 逻辑与(&&)

var flag = true && false;

如果有一个操作数不是布尔值

如果第一个操作数是对象,则返回第二个操作数 如果第二个操作数是对象,则只有在第一个操作数的结果是true的情况下才会返回该对象 如果两个操作数是对象,则返回第二个操作数 如果第一个操作数是null,则返回null 如果第一个操作数是NaN,则返回NaN 如果第一个操作数是undefined,则返回undefined

  • 逻辑或(||)

var result = true || false;

如果有个操作数不是布尔值

  • 如果第一个操作数是对象,则返回第一个操作数 如果第一个操作数的求值结果为false,则返回第二个操作数 如果两个操作数是对象,则返回第一个操作数 如果两个操作数是null,则返回null 如果两个操作数是NaN,则返回NaN 如果两个操作数是undefined,则返回undefined

乘性操作符

乘法、除法和求模操作符

  • 乘法

    var age = 12 * 10;// 乘法,计算两个数值的乘积
    

乘法操作符的规则: 正正得正,正负相乘得负,负负相乘得正,超出ECMAScript限制的范围,则返回Infinity和-Infinty 如果有一个操作符是NaN,则结果是NaN 如果Infinity与0相乘,则结果是NaN 如果是Infinity与非0数值相乘,结果是Infinity或-Infinity,取决于有符号操作数的符号 如果Infinity和Infinity相乘,则结果也是Infinity 如果有一个操作数不是整数,则会调用Number()将其转换为数值,然后再应用规则

  • 除法

由一个斜线负号(/)表示,执行第二个操作符除一个操作符的计算

var size = 66 / 3;

除法的规则: 执行常规的除法运算,两个整数和两个负数相除结果都是正数,如果只有一个负数,则结果为负数 超过ECMAScript范围的话,则返回Infinity或-Infinity 如果有一个是NaN,则结果是NaN 如果是Infinity被Infinity除,则结果是NaN 如果是零被零除,则结果是NaN 如果是非零的有限数被零除,则结果是Infinity或-Infinity,取决于有符号操作数的符号 如果是Infinity被任何非零数除,怎结果是Infinity或-Infinity 如果有一个操作数不是数值,则会执行Number转换之后,在执行上述规则

  • 求模(余数 %)

var s = 26 % 5;// 1

求模的规则: 如果操作数都是数值,执行常规的除法计算,返回除得的余数 如果被除数是无穷大值而除数是有限大的数值,则结果是NaN 如果被除数是有限大的数值而除数的是零,则结果是NaN 如果Infinity被Infinity除,则结果是NaN 如果被除数是有限大的数值而除数是无穷大的数值,则结果是被除数 如果被除数是0,则结果是0 如果有一个操作数不是数值,则在后台调用Number()转换数值之后在执行操作

加行操作符

  • 加法

加法的规则: 如果有一个操作符是NaN,则结果是NaN 如果是 Infinity 加 Infinity,则结果是Infinity 如果是 -Infinity 加-infinity ,则结果是-Infinity 如果是 Infinity 加 -infinity ,则结果是NaN 如果是 +0 加 +0 则结果是+0 如果是 +0 加 -0 则结果是+0 如果是 -0 + -0 则结果是-0 如果有一个操作数是字符串 如果两个操作符都是字符串,则拼接 如果有一个是字符串,则数值转成字符串拼接

  • 减法

减法的规则: 两个操作是数值,则正常进行减法运算 如果有一个是NaN,则结果是是NaN Infinity - Infinity = NaN -Infinity 减 -Infinity = NaN Infinity 减 -Infinity ,则结果是Infinity -Infinity 减 Infinity, 则结果是-Infinity +0 减 +0 ,结果是+0 -0 减 +0,则结果是-0 -0 减 -0 ,则结果是+0 如果有一个操作符是字符串,布尔值,null或undefined,则NUmber()转换之后,再进行减法运算 如果一个操作符是对象,则调用对象的valueOf方法表示该对象的数值

关系操作符

小于(<)、大于(>)、小于等于(<=)、大于等于(>=)

如果两个操作数的都是数值,则执行数值比较 如果两个操作数是字符串,则比较两个字符串对应的字符编码值 如果一个操作数是数值,则另一个操作数转换成数值,然后进行比较 如果一个操作数是对象,则调用对象的 valueof(),然后进行比较,如果没有valueOf,则调用toString方法,然后进行比较 如果一个操作数是布尔值,则先转换成数值,然后进行比较

相等操作符

相等和不相等:先转换再比较 全等和不等:仅比较而不转换

  • 相等(==)和不等(!=)

操作符规则: 如果一个操作数是布尔值,则在比较相等性之前先转换为数值,false:0 true:1 如果一个操作数是字符串,另一个操作数是数值,先将字符串转换为数值,然后比较 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法 null 和 undefined 是相等的 比较相等性之前,null 和 undefined不能转换为其他任何值 如果有一个操作符是NaN,相等则返回false 如果两个操作符是对象,则比较是不是同一个对象

  • 全等(===)和不全等(!==)

和相等不等很像,但是比较的是同一类型的值

条件操作符

var max = (num1>num2)?"true":"false"

赋值操作符 (=)

作用就是把右侧的值赋给左侧的变量

var num = 10;
num = num + 20;
num += 20;

算术操作符

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

逗号操作符

var num,num2,num3=10;

赋值返回最后一个值
var num = (2,10,5,2,0);// 0

results matching ""

    No results matching ""