Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JavaScript 中的逻辑运算 #73

Open
felix-cao opened this issue Sep 14, 2018 · 0 comments
Open

JavaScript 中的逻辑运算 #73

felix-cao opened this issue Sep 14, 2018 · 0 comments

Comments

@felix-cao
Copy link
Owner

felix-cao commented Sep 14, 2018

逻辑运算 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

二、 逻辑与 &&

  • 如果第一个操作数能够转换为 true, 计算结果就是第二个操作数。
  • 否则发生短路,结果为第一个操作数
var a = [10,20,30];
var b = "Hello Felix";
var obj = new Object();
var d;

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
@felix-cao felix-cao changed the title JavaScript中的逻辑运算 JavaScript 中的逻辑运算 Sep 14, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant