JavaScript布爾運算符詳解

2020-12-05 木森林林常識庫

布爾運算符的主要功能是測試兩個值的關係,是條件語句和循環語句的基礎,布爾運算符一共有3個:非(NOT)、與(AND)和或(OR)。

一、邏輯非

邏輯非操作符由一個嘆號(!)表示,可以應用於ECMAScript中的任何值。無論這個值是什麼數據類型,這個操作符都會返回一個布爾值。邏輯非操作符首先會將它的操作數轉換為一個布爾值,然後再對其求反。邏輯非操作符遵循下列規則:

如果操作數是一個對象,返回false。如果操作數是一個空字符串,返回true。如果操作數是一個非空字符串,返回false。如果操作數是數值0,返回true。如果操作數是任意非0數值(包括Infinity),返回false。如果操作數是null,返回true。如果操作數是NaN,返回true。如果操作數是undefined,返回true。邏輯非操作符也可以用於講一個值轉換為與其對應的布爾值。同時使用兩個邏輯非操作符,實際上就會模擬Boolean()轉型函數的行為。其中,第一個邏輯非操作會基於無論什麼操作數返回一個布爾值,而第二個邏輯非操作則對該布爾值求反,於是就得到了這個值真正對應的布爾值。

alert(!"blue"); //false

alert(!0); //true

alert(!!"blue"); //true

alert(!!0); //false

二、邏輯與

邏輯與操作符由兩個和號(&&)表示,有兩個操作數,邏輯與的真值表如下:

即兩個操作數都為true的時候才返回true,否則返回false。

邏輯與操作可以應用於任何類型的操作數,而不僅僅是布爾值。在有一個操作數不是布爾值的情況下,邏輯與操作就不一定返回布爾值,此時它遵循下列規則:

如果第一個操作數是對象,則返回第二個操作數。如果第二個操作數是對象,則只有在第一個操作數的求職結果為true的情況下才會返回該對象。如果兩個操作數都是對象,則返回第二個操作數。如果有一個操作數為null,則返回null。如果有一個操作數是undefined,則返回undefined。邏輯與操作屬於短路操作,即如果第一個操作數能夠決定結果,那麼就不會再對第二個操作數求值。對於邏輯與操作而言,如果第一個操作數是false,則無論第二個操作數是什麼值,結果都不再可能是true了。另外,不能在邏輯與操作中使用未定義的值,這會導致錯誤。

var result = true || false;var found = true;var result = (found && someUndefinedVariable); //這裡會發生錯誤alert(result); //這一行不會執行var found = false;var result = (found && someUndefinedVariable); //短路操作,不會發生錯誤alert(result); //false

三、邏輯或

邏輯或操作符由兩個豎線符號(||)表示,有兩個操作數,邏輯或的真值表如下:

兩個操作數都為false的時候才返回false,否則返回true。

與邏輯與操作相似,如果有一個操作數不是布爾值,邏輯或也不一定返回布爾值,此時遵循下列規則:

如果第一個操作數是對象,則返回第一個操作數。如果第一個操作數的求值結果為false,則返回第二個操作數。如果兩個操作數都是對象,則返回第一個操作數。如果兩個操作數都是null,則返回null。如果兩個操作數都是NaN,則返回NaN。如果兩個操作數都是undefined,則返回undefined。與邏輯與操作符相似,邏輯或操作符也是短路操作符。也就是說,如果第一個操作數的求值結果為true,就不會對第二個操作數求值了。另外,同樣不能在邏輯或操作中使用未定義的值,這會導致錯誤。

我們可以利用邏輯或的這一行為來避免為變量賦null或undefined值。

var myObject = preferredObject || backupObject;

變量myObject將被賦予等號後面兩個值中的一個。變量preferredObject中包含優先賦給變量的值,若preferredObject中不包含有效值,則將變量backupObject中的值賦給變量myObject。ECMAScript程序的賦值語句經常使用這種模式。

相關焦點

  • PPT布爾運算規則與公式
    PPT布爾運算規則與公式布爾運算概念:布爾運算是數字符號化的邏輯推演法,包括聯合、相交、相減。在圖形處理操作中引用了這種邏輯運算方法以使簡單的基本圖形組合產生新的形體;由於布爾在符號邏輯運算中的特殊貢獻,很多計算機語言中將邏輯運算稱為布爾運算,將其結果稱為布爾值。
  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascript Date對象javascript String對象JavaScript常用於實現一些前端效果。前些年流行的flash已經慢慢的被淘汰,js盛行起來。javascript :客戶端編程。javascript是由客戶端去解釋運行的。
  • 「有趣的布爾運算2」——切出好設計!
    「 布爾運算 是一個非常基礎簡單的建模工具 但如果設計師將這個工具運用的恰當 自然也可以創造出優秀的作品 ··
  • 第12講 NX10.0 入門圖文教程——球體和布爾運算
    並由二維布爾運算發展到三維圖形的布爾運算。  Boolean(布爾運算) 功用:Boolean(布爾運算)通過對兩個以上的物體進行併集、差集、交集的運算,從而得到新的物體形態。系統提供了4種布爾運算方式:Union(併集)、Intersection(交集)和Subtraction(差集,包括A-B和B-A兩種)。這些都將在後面的內容中詳細介紹。
  • JavaScript入門教程
    起源javascript前身叫做livescript,sun公司推出java,netspace公司引進java的概念,重新設計livescript,並更名javascript。發明者,布蘭登.艾克,表單驗證原先要經過伺服器,伺服器壓力大,等待時間長,js僅在客戶端就可完成。是什麼是一種腳本語言,是一種輕量級的程式語言。
  • JavaScript - Math對象
    中其實是有很多數學計算的需求的,不過不必擔心系統給我們提供了大量的數學運算的方法供我們使用而這些方法全都存在於我們的Math對象中Math常用的屬性:Math.PI 相當於π 3.14159Math對象常用的函數:1.Math.round() 四捨五入舉個小例子:<script type = 「text/javascript
  • Javascript去除字符串中的點或其他符號
    在前端上使用javascript進行操作的。測試了兩次沒有好用,程序直接把整個字符串都進行了替換,在考慮這個是為什麼呢?javascript(請忽略此配圖)示例var ip = data.field.ip.replace(/.
  • python循環語句用數據做判斷:布爾值和布爾運算
    python循環語句用數據做判斷:布爾值和布爾運算更深入的學習循環語句的用法:用數據做判斷:布爾值 和 布爾運算之前我們提到,計算機利用數據有三種方式:1.直接使用數據,2.計算和加工數據,3.用數據做判斷。
  • 在JavaScript中,使用replace()、test()和exec()方法匹配字符串
    JavaScript核心代碼如下:<script type="text/javascript">var str = "Hello Microsoft!"使用字符串替換的核心JavaScript代碼如下:<script type="text/javascript">var str = "一都編程,每個知識就是一個案例。"
  • AJAXRPC: javascript調用服務端方法
    同步調用 <script type="text/javascript">......try{ var obj = Test.sayHello('world!'); ......}catch(e){ //e.error 錯誤碼 //e.message 錯誤描述}......
  • 第五篇:JavaScript事件處理
    庫的網頁代碼(案例代碼見unit12\case1.html):<html><head><title>JavaScript開發案例</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><script type="text/javascript
  • 一天一點JavaScript編程知識:Animation動畫
    PS:供複製的代碼,但是請注意,圖片資源需要調整一下<html> <head> <title>JavaScript Animation</title> <script type = "text/javascript"> var imgObj = null; function init() { imgObj
  • 來一輪帶注釋的demo,徹底搞懂javascript中的replace函數
    javascript這門語言一直就像一位帶著面紗的美女,總是看不清,摸不透,一直專注伺服器端,也從來沒有特別重視過,直到最近幾年,javascript越來越重要,越來越通用。最近和前端走的比較近,藉此機會,好好鞏固一下相關知識點。
  • javascript在自動化測試項目中的應用「軟體測試開發入門教程」
    比如說我今天分享的主題是javascript在自動化測試中的應用有些朋友說我之前講的自動化測試的東西,需要消化很久,有一定的難度,意思就是說我動不動就講測試框架,測試開發是不是會有這樣的感覺?比如今天分享的javascript,大家做軟體測試有沒有用過?
  • 在JavaScript字符串的search()方法中,如何匹配正則表達式?
    Search()方法的使用正則表達式的代碼如下:<script type="text/javascript">//正則表達式var patt = /Yido/i;//字符串var str1 = "Hello Yido Online Edu."
  • JavaScript中的「黑話」
    參考資料https://modernweb.com/45-useful-javascript-tips-tricks-and-best-practices/https://dmitripavlutin.com/the-magic-behind-array-length-property/https://medium.freecodecamp.org/9-neat-javascript-tricks-e2742f2735c3https
  • 從setTimeout(fn,0)函數剖析JavaScript的執行機制
    javascript 引擎線程:也可以稱為 JS 內核,主要負責處理 Javascript 腳本程序,例如 V8 引擎。Javascript 引擎線程理所當然是負責解析 Javascript 腳本,運行代碼。瀏覽器無論什麼時候都只有一個 JS 線程在運行 JS 程序。
  • 什麼是JavaScript對象?如何創建並引用?這就告訴你!
    2.3 創建對象a.直接使用大括號創建對象b.使用new命令生成一個Object對象的實例c.使用Object.create方法創建對象var obj1 = {};var obj2 = new Object();var obj3 = Object.create(null);Object是在javascript
  • 50個實用的JavaScript工具
    JavaScript Diagram Builder  是一個跨瀏覽器的javascript庫,他可以幫助你創建坐標圖或圖表的,你只需要引用
  • 分享幾個javascript實用函數
    從本文開始小編將定期發布javascript相關的代碼集錦,每次發十個與大家分享,首先是數組篇,也許有人會說,可以用常用的lodash的等庫啊。