felix-cao / Blog

A little progress a day makes you a big success!
31 stars 4 forks source link

JavaScript 中的逻辑运算 #73

Open felix-cao opened 6 years ago

felix-cao commented 6 years ago

逻辑运算 Logical operators,又称布尔运算, JavaScript 中的逻辑运算与其他强类型语言(如: Java、c#、c等)有着很大的不同,其他那些强类型的语言的逻辑运算参与运算的都是 true 或 false, 很容易理解和记住,但是 Javascript 中的“逻辑运算”参与运算的可以是任意类型,结果也可能是任意类型,规则很复杂。

Javascript 的这种不同的数据类型之间可以做运算,是因为 Javascript 引擎在运算之前会悄悄的把参与运算的数据类型进行了隐士转换(implicit)。

其他数据类型隐式转换为布尔类型的规则: 空字符串、0、NaN、null、undefined, 除此之外全部转为 true.

一、 取反

首先将数据转化为布尔值,然后取反,结果要么为 true, 要么为 false

var a = [10,20,30];
var b = "Hello Felix";
var obj = new Object();
var d;

console.log(!""); // true
console.log(!d); // true
console.log(!a); // false
console.log(!b); // false
console.log(!obj); // false

二、 逻辑与 &&

console.log(true && 10); // 第一个操作数是 true,结果是第二个操作,也就是10 console.log(false && b); // 第一个操作数是 false,结果 false console.log(100 && false); // 第一个操作数是100,结果 false console.log(undefined && false); // 第一个操作数是 undefined,结果 undefined console.log(NaN && false); // 第一个操作数是 NaN,结果 NaN console.log(null && false); // 第一个操作数是 null,结果 null console.log('' && false); // 第一个操作数是空串,结果空串 console.log(0 && 100); // 结果是0 console.log(5 && 100); // 100 console.log(a && b); // Hello Felix console.log(obj && 200); // 200

## 三、逻辑或 ||
- 如果第一个操作数能够转换为 false, 计算结果就是第二个操作数。
- 否则发生短路,结果为第一个操作数

var a = [10,20,30]; var b = "Hello Felix"; var obj = new Object(); var d;

console.log(true || 10); // 第一个操作数是true,结果是第一个操作,也就是true console.log(false || b); // 第一个操作数是false,结果是第二个操作数b console.log(100 || false); // 第一个操作数是100,结果100 console.log(undefined || 9); // 第一个操作数是undefined转false,结果9 console.log(NaN || false); // 第一个操作数是NaN转false,结果第二个操作数 console.log(null || a); // 第一个操作数是null转false,结果a console.log('' || false); // 第一个操作数是空串转false,结果第二操作数 console.log(0 || 100); // 结果是100 console.log(5 || 100); // 5 console.log(a || b); // a console.log(obj || 200); // obj