Javascript当中的操作符(易忘)

128 阅读3分钟

一、一元操作符

1. 前置递增(++age;)和前置递减(--age;)操作符

前置递增和前置递减操作符会让变量的值在语句被求值之前改变(即先改变后求值)

let age = 20;
let anotherAge = --age + 2;
console.log(age);    // 19
console.log(anotherAge);    // 21
2. 后置递增(age++;)和后置递减(age--;)操作符

后置递增和后置递减操作符在语句被求值之后才会改变变量的值(即先求值后改变)

let age = 20;
let anotherAge = age++ + 2;
console.log(age);    // 21
console.log(anotherAge);    // 22

二、布尔操作符

1. 逻辑非(!)
  • 如果操作数是对象,则返回false;
  • 如果操作数是非空字符串,则返回false;
  • 如果操作数是空字符串,则返回true;
  • 如果操作数是数值0,则返回true;
  • 如果操作数是非0数值(包括Infinity),则返回false;
  • 如果操作数是null,则返回true;
  • 如果操作数是undefined,则返回true;
  • 如果操作数是NaN,则返回true;
1. 逻辑与(&&)

逻辑与操作符是一种短路操作符,意思就是如果第一个操作数决定了结果,那么永远不会对第二个操作数进行求值。即如果第一个操作数是false,无论第二个操作数是什么,都不会对第二个操作数进行求值,直接返回false。特点是不一定返回布尔值,遵循以下规则:

  • 如果第一个操作数是对象,则返回第二个操作数
  • 如果第二个操作数是对象,只有第一个操作数值为true时才会返回该对象
  • 如果有一个操作数是null,则返回null
  • 如果有一个操作数是undefined,则返回undefined
  • 如果有一个操作数是NaN,则返回NaN
  • 0 && (任何值),都会返回0
1. 逻辑或(||)

与逻辑与操作符类似,也具有短路的特性。对逻辑或而言,第一个操作数求值为true,那么第二个操作数就不会被求值。返回值遵循以下规则:

  • 如果第一个操作数是对象,则返回第一个操作数
  • 如果第一个操作数求值为false,则返回第二个操作数
console.log(false || 0)           // 0
console.log(false || null)        // null
console.log(false || NaN)         // NaN
console.log(false || undefined)   // undefined
  • 如果两个操作数都是对象,则返回第一个操作数
  • 如果两个操作数都是NaN,则返回NaN
  • 如果两个操作数都是null,则返回null
  • 如果两个操作数都是undefined,则返回undefined

三、指数操作符(**)

ES7新增的指数操作符,在ES7之前实现指数操作需要以下操作:

console.log(Math.pow(3,2))   // 9
console.log(Math.pow(16,0.5))   // 4

使用ES7新增的指数操作符进行指数赋值(**=):

let a = 2;
a **=2;
console.log(a);   // a = 4

四、关系操作符

关系操作符执行比较两个值的操作,包括大于(>)、小于(<)、大于等于(>=)、小于等于(<=),这几个操作符都返回布尔值。规则如下:

  • 如果操作数都是数值,则执行数值比较
  • 如果操作数都是字符串,则逐个比较字符串中对应的字符编码
  • 如果有任一操作数是数值,则将另外一个操作数转为数值进行比较(如果不能转换成数值,即为'NaN',任何关系在比较NaN时都会返回false)
  • 如果有任一操作数是对象,则调用valueOf()方法,取得结果后根据前面的规则进行比较。如果没有valueOf()操作符,则调用toString()方法,取得结果后根据前面的规则进行比较。
  • 如果有任一操作符是布尔值,则转换为数值后进行比较

五、相等操作符

  • null == undefined ,null和undefined相等,但不全等
  • null 和 undefined 不能转换为其他类型的值进行比较
  • 如果有任一操作数是NaN,则相等操作符返回false,即使两个操作数都是NaN,也会返回false。
  • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则返回true