布尔操作符

逻辑非(!

将操作数(任何数据类型)转换为一个布尔值,并求反。

!null; // true
!undefined; // true
!true; // false
!false; // true
!0; // true
!NaN; // true
!1; // false  除 0 和 NaN 以外的任何 Number 类型,此操作都会返回 false
!""; // true
!"s"; // false 任何非空的String类型,此操作都会返回false
!Symbol(); // false

连续使用两个 ! 可达到 Boolean() 函数同样的效果。

!!null; // false
// ...

逻辑与(&&

属于短路操作,当第一个操作数求值结果为false(如果不为Boolean类型则存在一个隐形转换),则不会再对第二个操作数求值,并返回第一个操作数;只有当第一个操作数位 true 才会返回第二个操作数(不论第二个操作数是 true 还是 false)。

const b1 = true;
const result1 = (b1 && undefined_variable); // ReferenceError
console.log(result1);

const b2 = false; // 如果是非 Boolean 类型则会自动转为 Boolean 类型
const result2 = (b2 && undefined_variable); 
console.log(result2); // false

b1 && console.log('只有第一个操作数为真,我才会出现在控制台')
b2 && console.log('只有第一个操作数为真,我才会出现在控制台')

逻辑或(||

同样属于短路操作,当第一个操作数求值结果为 true (如果不为Boolean类型则存在一个隐形转换),则不会对第二个操作数求值,并返回第一个操作数;只有当第一个操作数为 false 才会返回第二个操作数(不论第二个操作数是 true 还是 false)。

const b1 = true;
const result1 = (b1 || undefined_variable); 
console.log(result1); // false

const b2 = false;
const result2 = (b2 || undefined_variable); // ReferenceError
console.log(result2);

b1 || console.log('你在控制台看不到我')
b2 || console.log('我会出现在控制台!因为b2 === false')

加性操作符

加法

  • Number类型:

    • 任何数加NaN,结果都是NaN
    • Infinity + Infinity = Infinity
    • Infinity - Infinity = NaN
    • -Infinity - Infinity = -Infinity
    • 0 + 0 = 0
    • 0 - 0 = 0
    • -0 - 0 = -0
  • 操作数中包含 String 类型,则将非 String 类型转为 String 类型并拼接。

    • ObjectBoolean类型,则调用它们的toString()方法获得字符串值。默认情况下 Object 类型返回 "[object Object]"Boolean类型 true 返回 "true"false 返回 "false"
    • Undefined类型或Null类型: 调用 String() 取得字符串 "undefined""null"
const s1 = "" + "s"; 
const s2 = "str" + { name: "Ashin" }; 
const s3 = "str" + true;
const s4 = "str" + null;
const s5 = "str" + undefined;

console.log(s1); // "s"
console.log(s2); // "str[object Object]"
console.log(s3); // "strtrue"
console.log(s4); // "strnull"
console.log(s5); // "strundefined"

减法

乘性操作符

乘法

除法

求模

关系操作符

相等操作符

相等和不相等

全等和不全等


achuan9
37 声望3 粉丝

lalala~