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

專注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大片黑 | 亚洲日本aⅴ片在线观看香蕉 | 亚洲成a人片在线观看尤物 亚洲成a人片在线观看88 | 欧美伦理一区二区三区 | 精品国产成人a区在线观看 精品国产v无码大片在线观看 | 亚洲麻豆国产精品 | 国产欧美成人免费观看 | 亚洲波多野结衣日韩在线 | 国产的一级毛片完整 | 视频一区二区三区欧美日韩 | 目韩一区二区三区系列片丶 | 亚洲成在人天堂一区二区 | 欧美特黄三级在线观看 | 最近免费中文字幕高清大全 | 亚洲午夜在线观看 | 国产福利在线 | 日韩一级在线视频 | 99视频热| 丝袜免费网站 | 国产乱人视频在线播放不卡 | 欧美中文字幕一二三四区 | 午夜激情免费视频 | 欧美日本一二三区 | 日韩影院在线观看 | 欧美特黄一区二区三区 | 一区二区三区四区在线观看视频 | 中文字幕免费看 | 一个人在线看免费的视频 | 国产区在线免费观看 | 欧美在线观看一区 | 99精品在免费线视频 | 在线毛片网站 | 日皮黄色 | 性xxxx毛茸茸俄罗斯 | 欧美不卡影院 | 成人国内精品久久久久影 | 日本三级视频在线播放 | 最新的国产成人精品2022 | 免费a在线看 | 天天爽天天射 | 成人欧美一区在线视频在线观看 |