Javascript里的if判斷與邏輯運算符(||, &&)和比較運算符的特別之處


寫JS時不可避免要用到 if 與 邏輯運算符( ||, &&)。

如果你經常閱讀Js的第三方組件源碼, 會發現有一種寫法作為初始化變量的方法經常出現。

 

var variable = variable || {};

 

我第一次看到這樣的代碼時覺得很不可思議,在多數主流語言下(如Java,C#,C/C++)上面得到的結果值毫無疑問會是一個布爾值,且始終為true。

在看看另一句我們自己寫時也常使用的

 

if( variable ){

  somethingToDo();

}

 

雖然用得順手,可是你真的知道哪些值可以觸發 If 而哪些是不可以的嗎?

還有順帶的一提的是比較運算符,不過這里只說說"=="和"==="。

 

鑒於以上問題,於是上MDN上看了一些相關資料,順帶作下筆記。

 

首先來看一張表 :

 

取自MDN
Operator Usage Description
Logical AND (&&) expr1&&expr2 Returns expr1 if it can be converted to false; otherwise, returns expr2. Thus, when used with Boolean values, && returns true if both operands are true; otherwise, returns false.
Logical OR (||) expr1||expr2 Returns expr1 if it can be converted to true; otherwise, returns expr2. Thus, when used with Boolean values, || returns true if either operand is true.
Logical NOT (!) !expr Returns false if its single operand can be converted to true; otherwise, returnstrue.

 

 

圖就不翻譯了,相信不難看懂,可以看出除了非運算符(!),其余兩者都可能返回expr。

在MDN注明了,如果expr為非布爾值的話,它們也是會被原封不動地返回的,這與java或者c#的邏輯運算符是不同的。

在看來下什么情況下可以被轉為false(MDN值提供了可以被轉為false的值,也就是說其余的都是true)

他們包括

  • null;
  • NaN;
  • 0;(這是數字的0)
  • 空字符串(""); 
  • undefined.

 知道了這些之后,剛才的第一段代碼就很好理解了。也就是說,在 variable 為以上五種情況時會初始化為{}。

而第二段的 if 也很清楚地知道了它的判斷情況。隨便附上一句MDN關於if的解釋(原文點我)。

The if statement executes a statement if a specified condition is truthy. If the condition is falsy, another statement can be executed.

(如果condition是truhy[這是js定義的一種狀態]的,那么statement1會被執行,否則其他statemen會被執行)

示例代碼如下:

if (condition)
   statement1
[else
   statement2]

 

而關於truthy和falsy的定義在這個邏輯運算符的介紹頁面(原文點這)。

If a value can be converted to true, the value is so-called truthy. If a value can be converted to false, the value is so-called falsy.

(如果一個值可以轉化為true那么稱呼它為truthy,如果一個值可以轉為false那么稱呼為falsy)。

 

接下來關於嚴格等於符[strcit equality](===)和類型轉化等於符[type-converting equality](==)。

從名字就看出來了,后者在比較時會執行隱式的類型轉化在比較,而前者不會。

MDN列出了幾點值得注意的地方(原文點我):

 

  • 嚴格比較時兩個字符串必須在字符順序,字符,長度都相等時才會相等。
  • 嚴格比較時兩個數字必須要擁有相同的數值大小。NaN不等於任何值,包括自己。 正負零沒有區分。
  • 布爾值嚴格比較,只有當兩者都是true或false時才相同.
  • 兩個不重復的對象無論使用===或者==都不可能相等。
  • 當表達式比較的是對象時,只有它們的引用是來自同一個對象時才會為true.
  • null和undefine嚴格相等比較時,只等於自身,而抽象比較(==)時相等。

 

以上。

這幾點都是我們在寫Js時常用的,如果沒徹底理解的話,恐怕會出一些不可思議的錯誤(笑),所以作下筆記,方便大家與自己都可以參考。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM