黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 一文學懂邏輯運算符

一文學懂邏輯運算符

更新時間:2020-10-13 17:24:15 來源:動力節點 瀏覽1167次

對于我們來說,邏輯運算符算是眾多運算符中我們接觸比較早的,所以我們對邏輯運算符的學習其實從中學的物理中就有所體現了。本文我們就帶大家一起重溫經典,回顧邏輯運算符的同時,利于我們更深入的學習。


邏輯運算符一共有以下三個:||(或),&&(與),!(非)。

雖然他們被稱為“邏輯”運算符,但這些運算符卻可以被應用于任意類型的值,而不僅僅是布爾值。他們的結果也同樣可以是任意類型。讓我們來詳細看一下各種邏輯運算符的用法。


一、||(或)

兩個豎線符號表示了“或”運算:

result = a || b;

在傳統的編程中,邏輯或僅能夠操作布爾值。如果參與運算的任意一個參數為 true,返回的結果就為 true,否則返回 false。

在 JavaScript 中,邏輯運算符更加靈活強大。但是首先我們看一下操作數是布爾值的時候發生了什么。

下面是四種可能的邏輯組合:

alert( true || true ); // true

alert( false || true ); // true

alert( true || false ); // true

alert( false || false ); // false

正如我們所見,除了兩個操作數都是 false 的情況,結果都是 true。

如果操作數不是布爾值,那么它將會被轉化為布爾值來參與運算。

例如,數字 1 將會被作為 true,數字 0 則作為 false:

if (1 || 0) { // 工作原理相當于 if( true || false )

alert( 'truthy!' );

}

大多數情況,邏輯或 || 會被用在 if 語句中,用來測試是否有 任何 給定的條件為 true。

例如:

let hour = 9;

if (hour < 10 || hour > 18) {

alert( 'The office is closed.' );

}

我們可以傳入更多的條件:

let hour = 12;

let isWeekend = true;

if (hour < 10 || hour > 18 || isWeekend) {

alert( 'The office is closed.' ); // 是周末

}

或運算尋找第一個真值

上文提到的邏輯處理多少有些傳統了。下面讓我們看看 JavaScript 的“附加”特性。

獲取變量列表或者表達式的第一個真值。

假設我們有幾個變量,它們可能包含某些數據或者是 null/undefined。我們需要選出第一個包含數據的變量。

我們可以這樣應用或運算 ||:

let currentUser = null;

let defaultUser = "John";

let name = currentUser || defaultUser || "unnamed";

alert( name ); // 選出了 “John” — 第一個真值

如果 currentUser 和 defaultUser 都是假值,那么結果就是 "unnamed"。

短路取值。

操作數不僅僅可以是值,還可以是任意表達式。或運算會從左到右計算并測試每個操作數。當找到第一個真值,計算就會停止,并返回這個值。這個過程就叫做“短路取值”,因為它盡可能地減少從左到右計算的次數。

當表達式作為第二個參數并且有一定的副作用(side effects),比如變量賦值的時候,短路取值的情況就清楚可見。

如果我們運行下面的例子,x 將不會被賦值:

let x;

true || (x = 1);

alert(x); // undefined,因為 (x = 1) 沒有被執行

如果第一個參數是 false,或運算將會繼續,并計算第二個參數,也就會運行賦值操作。

let x;

false || (x = 1);

alert(x); // 1

賦值操作只是一個很簡單的情況。可能有副作用,如果計算沒有到達,副作用就不會發生。

正如我們所見,這種用法是“if 語句的簡短方式”。第一個操作數被轉化為布爾值,如果是假,那么第二個參數就會被執行。

大多數情況下,最好使用常規的 if 語句,這樣代碼可讀性更高,但是有時候這種方式會很簡潔。


二、&&(與)

兩個 & 符號表示 && 與操作:

result = a && b;

傳統的編程中,當兩個操作數都是真值,與操作返回 true,否則返回 false:

alert( true && true ); // true

alert( false && true ); // false

alert( true && false ); // false

alert( false && false ); // false

使用 if 語句的例子:

let hour = 12;

let minute = 30;

if (hour == 12 && minute == 30) {

alert( 'Time is 12:30' );

}

就像或運算一樣,與運算的操作數可以是任意類型的值:

if (1 && 0) { // 作為 true && false 來執行

alert( "won't work, because the result is falsy" );

}

與操作尋找第一個假值

給出多個參加與運算的值:

result = value1 && value2 && value3;

與運算 && 做了如下的事:

從左到右依次計算操作數。

將處理每一個操作數時,都將其轉化為布爾值。如果結果是 false,就停止計算,并返回這個操作數的初始值。

如果所有的操作數都被計算過(也就是,轉換結果都是 true),則返回最后一個操作數。

換句話說,與操作符返回第一個假值,如果沒有假值就返回最后一個值。

上面的規則和或運算很像。區別就是與運算返回第一個假值而或操作返回第一個真值。

例如:

// 如果第一個操作符是真值,

// 與操作返回第二個操作數:

alert( 1 && 0 ); // 0

alert( 1 && 5 ); // 5

// 如果第一個操作符是假值,

// 與操作直接返回它。第二個操作數被忽略

alert( null && 5 ); // null

alert( 0 && "no matter what" ); // 0

我們也可以在一行代碼上串聯多個值。查看第一個假值是否被返回:

alert( 1 && 2 && null && 3 ); // null

如果所有的值都是真值,最后一個值將會被返回:

alert( 1 && 2 && 3 ); // 3,最后一個值

與運算 && 在或操作符 || 之前執行

與運算 && 的優先級比或運算 || 要高。

所以代碼 a && b || c && d 完全跟 && 表達式加了括號一樣:(a && b) || (c && d)。

就像或運算一樣,與運算 && 有時候能夠代替 if。

帶 && 的代碼變體看上去更短。但是 if 的含義更明顯,可讀性也更高。

所以建議是根據目的選擇代碼的結構。需要條件判斷就用 if,需要與運算就用 &&。


三、!(非)

感嘆符號 ! 表示布爾非運算。

語法相當簡單:

result = !value;

操作符接受一個參數,并按如下運作:

將操作數轉化為布爾類型:true/false。

返回相反的值。

例如:

alert( !true ); // false

alert( !0 ); // true

兩個非運算 !! 有時候用來將某個值轉化為布爾類型:

alert( !!"non-empty string" ); // true

alert( !!null ); // false

也就是,第一個非運算將該值轉化為布爾類型并取反,第二個非運算再次取反。最后我們就得到了一個任意值到布爾值的轉化。

有更多詳細的方法可以完成同樣的事 —— 一個內置的 Boolean 函數:

alert( Boolean("non-empty string") ); // true

alert( Boolean(null) ); // false

非運算符 ! 的優先級在所有邏輯運算符里面最高,所以它總是在 && 和 || 前執行。


本文對邏輯運算符的講解已經很透徹了,相信只要你細細品味,花上那么一點時間去思考,就一定能夠完全掌握邏輯運算符的用法。當然,如果你不滿足于此,對Java知識有更多的渴望,可以觀看本站的Java零基礎教程,學習更多的Java基礎知識。


提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 九九九视频 | 男女视频在线观看网站 | 成人在线观看午夜 | 操操操日日 | 九月丁香激情综合婷婷玉立 | 一级片免费在线观看视频 | 色网址在线观看 | 久久精品不卡 | 香港三级日本三级a视频 | xxx国产hd| 欧美日韩美女 | 久久熟 | 在线观看国产黄色 | 大片免费播放器免费观看 | 午夜亚洲视频 | 国产成人综合网亚洲欧美在线 | 国产成人精品三级在线 | 免费在线h视频 | 欧美视频一区二区专区 | 波多野衣结在线精品二区 | 日韩色网 | 欧美视频免费一区二区三区 | 2019年中文字字幕视频 | 亚洲国产系列一区二区三区 | 欧美日韩综合视频 | 伊人精品视频 | 18jzjzz国产 | 综合五月天堂 | 欧美日本免费一区二区三区 | 日日噜噜噜噜人人爽亚洲精品 | 欧美18一19sex性hd | 久久免费精品高清麻豆 | 国产美女在线一区二区三区 | 国产一区二区三区亚洲欧美 | 午夜在线视频免费观看 | 7m凹凸国产刺激在线视频 | 99一级毛片| 欧美色成人 | 香港三级日本三级人妇三级四 | 欧美日韩影视 | 六月丁香啪啪六月激情 |