布尔操作符
逻辑非(!
)
将操作数(任何数据类型)转换为一个布尔值,并求反。
!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
类型并拼接。-
Object
、Boolean
类型,则调用它们的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"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。