重新認識JavaScript中的true和false

2021-02-13 優才網

導讀:跟其他大多數的計算機語言一樣,JavaScript也支持Boolean類型的數據,這些值可以被設置為true 或者false 。另外,JavaScript中的所有數據類型的值都有一個默認的布爾值,一般稱為真值(truthy)或者假值(falsy)。在處理真值和假值時會有一點奇怪,尤其是變量與變量之間進行比較的時候。理解更多相關的怪異規則會對我們開發調試複雜的客戶端應用程式很有幫助。

今天優優推薦的這篇譯文,就會對truthy和falsy進行詳細講解,希望對大家有幫助。

真值和假值

下面這些值在JavaScript中都是falsy:

除上面幾個值以外,其他所有值都是truthy,包括字符串"0", "false", 空函數,空數組,空對象。

var a = !!(0); var b = !!("0");

假值的比較

Falsy values遵循一些看起來怪怪的比較規則,這些規則可能會導致程序出現一些邏輯錯誤。

假值false,0,""三者是相等的,並且它們之間可以相互比較。

var c = (false == 0); var d = (false == ""); var e = (0 == "");

假值null,undefined,除了它們自身之外和任何值都不相等。

var f = (null == false); // falsevar g = (null == null); // truevar h = (undefined == undefined); // truevar i = (undefined == null); // true

最後,假值 NaN 和任何值都不相等,包括 NaN 本身!

var j = (NaN == null); var k = (NaN == NaN);

你應該知道typeof(NaN)返回"Number"。幸運的是,JavaScript有一個核心函數isNaN()來判斷一個值是否是NaN。

如果還是有疑惑

那麼請在使用真值、假值容易導致邏輯錯誤的地方,使用嚴格相等(===)和嚴格不相等(!==)吧。這兩個操作符會同時比較對象的類型和值。

var l = (false == 0); // truevar m = (false === 0); // false

在你寫JavaScript代碼的時候,真值和假值讓你痛苦過嗎?

作者簡介:Craig Buckler是一名英國特約web顧問,他早在1995年就 搭建了一個在IE 2.0 上面展示的頁面。從那時候開始,他就開始倡導web標準,可訪問性,HTML5技術的最佳實踐。。

原文:https://www.sitepoint.com/javascript-truthy-falsy/

譯文:https://segmentfault.com/a/1190000007665056

作者:Craig Buckler
譯者:楊忠勳

推薦閱讀:

相關焦點

  • 重新認識javascript的settimeout和異步
    然後看了一下文章下面的評論,發現5樓和6樓的回答很有道理,主要意思就是說javascript引擎是單線程執行的,while循環那裡執行的時候,settimeout裡面的函數根本沒有執行的機會,這樣while那裡永遠為真,造成死循環。
  • 在javascript程式語言中,數據類型boolean的應用場景
    在javascript編程中,數據類型布爾是最常見的一種類型。此種類型邏輯上比較簡單,只有兩個值:true和false。布爾數據類型與計算機底層的電路開與關有著密切的關聯。但是,布爾值true不一定是1,false不一定是0。
  • 【Excel函數】True與False
    周二 · 函數    關鍵詞:true、false1語法
  • JavaScript中的「黑話」
    (num & 1);&&,表示邏輯與,通常用於if條件判斷,可跟你想像的不太一樣,&&並不是單純的返回true或者false,而是依據:若第一個表達式為false,則返回第一個表達式;若第一個表達式為true,返回第二個表達式。
  • 網頁技巧:妥善處理JavaScript中的錯誤
    在這些實例中,JavaScript語言使得發現錯誤變得簡單,從而能夠繼續下去。發現錯誤和Java、C#等其他語言相類似,JavaScript中包括了try/catch/finally語句。一個try語句包含了一組代碼,在這組代碼中,像運行時間錯誤這樣的異常可能會發生。
  • excel函數基礎學習,true和false配合函數進行靈活運用
    我們在實際工作中,excel函數的作用就是提高我們的工作效率,減輕我們的工作負擔,下面我們就一起學習一下有關true和false配合函數進行靈活運用的內容。true和false是返回參數的邏輯值,可以直接使用,一般是配合其他函數一起使用,當然也可以直接用於運算,true代表的數值是1,false代表的數值是0。
  • 探秘JavaScript中的六個字符
    我們可以使用Javascript中[,],(,),! and +這六個符號寫一些神奇的代碼。如果你現在不是在手機,你可以打開瀏覽器的控制臺,你可以將任何代碼示例粘貼到控制臺,並且代碼值為true。讓我們從最基本的開始,要記住一些黃金規則:!
  • JavaScript中的陷阱大集合
    evaleval 可以將字符串以javascript代碼的形式來解析執行,但是一般來說我們不建議這麼做。因為eval非常慢 - 當javascript被加載到瀏覽器中時,它會被編譯成本地代碼;然而執行的過程中每次遇到eval表達式,編譯引擎都將重新啟動執行編譯,這樣做的代 價太大了。
  • 為什麼 Java 中「1000==1000」為false,而」100==100「為true?
    -100-100-returns-tr為什麼 Java 中「1000==1000」為false,而」100==100「為true?如果你運行下面的代碼:Integer a = 1000, b = 1000;      System.out.println(a == b);//1    Integer c = 100, d = 100;      System.out.println(c == d);//2你會得到false
  • 3.2.1 JavaScript中while循環語句的使用
    JavaScript中的while循環語句也稱為前測試循環語句,它先測試循環條件是否成立,如果成立則循環,如果不成立則不循環。運作說明:首先判斷表達式的值是否為true,即判斷循環條件是否成立。如果值為true,則執行語句組,執行完畢後,返回來再判斷表達式的值是否為true;如果值為false,則不循環,即執行while循環語句後面的語句。
  • 為什麼Java中1000==1000為false而100==100為true?
    如果你運行下面的代碼Integer a = 1000, b = 1000;System.out.println(a == b);System.out.println(c == d);你會得到:falsetrue基本知識:我們知道,如果兩個引用指向同一個對象,用==表示它們是相等的。
  • 七天學會javascript第一天javascript介紹
    javascript介紹javascript數據類型javascript運算符javascript對象javascriptDate對象javascript String對象JavaScript常用於實現一些前端效果。
  • JavaScript 條件語句if、switch-初級web前端工程師必學
    條件語句默認情況下,javascript解釋器依照語句的編寫順序依次執行。而javascript中的很多語句可以改變語句的默認執行順序。本文介紹可以改變語句默認執行順序的條件語句、循環語句和跳轉語句腳本的威力體現在它們可以根據人們給出的各種條件做出決策,javascript使用條件語句來做判斷,條件語句(conditianal statement)通過判斷表達式的值來決定執行還是跳過某些語句,包括if語句和switch語句if語句
  • JavaScript 中的 NaN
    NaN numberJavaScript 中的數字類型是所有數字值的集合,包括 「Not A Number」,正無窮和負無窮。JavaScript 通過內置函數來檢測 NaN:isNaN() 和 Number.isNaN():1isNaN(NaN); // => true2isNaN(1);   // => false34Number.isNaN(NaN); // => true5Number.isNaN(1);   // => false
  • 邏輯函數中用於判斷邏輯值的FALSE函數與TRUE函數
    今日繼續講解邏輯函數的第二講,FALSE函數和TRUE函數的用法,這兩個函數在EXCEL操作過程中是非常重要的函數,應用的也非常多,我在之前的講解也涉及過,這裡再次給大家講解。其實邏輯函數在整個函數的應用中佔著十分重要的比重。希望大家能熟練地掌握。
  • 3.1.2 JavaScript中if-else語句的使用
    JavaScript的if-else語句是if語句的標準形式,在if語句簡單形式的基礎上增加一個else從句,當表達式的值是false時執行else從句中的語句組。當表達式的值為true時,執行該語句組。3)語句組2:用於指定要執行的語句序列,可以是一條或多條語句。當表達式的值為false時,執行該語句組。運作說明:首先對表達式的值進行判斷,如果為true,則執行語句組1,否則執行語句組2。
  • 在JavaScript中,使用replace()、test()和exec()方法匹配字符串
    如果匹配上,則test()的結果是true,否則為false。這3個修飾符的含義和使用方法如下所述。6.1. /g修飾符和match()方法/g修飾符,表示執行全局匹配,並不是所有與正則表達式相關的函數都支持全局匹配。
  • 問號臉為什麼 Java 中1000==1000 為 false而 100==100 為 true
    本文轉載自【微信公眾號:java進階架構師,ID:java_jiagoushi】經微信公眾號授權轉載,如需轉載與原文作者聯繫為什麼 Java 中「1000==1000」為false,而」100==100「
  • Javascript 實現複製(Copy)動作大全
    2、複製專題地址和 url 地址,傳給 QQ/MSN 上的好友<!;}</script>5、複製文本框或者隱藏域中的內容<script language="javascript">function CopyUrl(target){ target.value=myimg.value; target.select();
  • 12 個非常有用的 JavaScript 技巧
    這些小技巧可能在你的實際工作中或許能幫助你解決一些問題。使用!!操作符轉換布爾值有時候我們需要對一個變量查檢其是否存在或者檢查值是否有一個有效值,如果存在就返回true值。為了做這樣的驗證,我們可以使用!!操作符來實現是非常的方便與簡單。對於變量可以使用!!