JavaScript >> Javascript 文檔 >  >> JavaScript

JavaScript:==vs ===運算符

簡介

比較運算符用於邏輯語句中,以確定兩個變量或對像是否相等 通過一些已經設置或自定義的標準。如果推導出兩個變量或對象相等 運算符返回 true , 和 false 如果不是。

JavaScript 中的比較運算符有:

  • < - 小於
  • > - 大於
  • <= - 小於或等於
  • >= - 大於或等於
  • ===== - 等於(鬆散和嚴格的相等運算符)
  • !=!== - 不等於(鬆散嚴格的不等式運算符)

JavaScript 很有趣,因為它有兩個視覺上非常相似,但實際上非常不同的相等比較運算符:===== .

在本文中,我們將解釋鬆散相等運算符和嚴格相等運算符之間的區別,並介紹它們的一些用法示例。

JavaScript 中的鬆散等式運算符 (==)

JavaScript 中的雙等號正在測試 鬆散等式 .這允許 JavaScript 引擎嘗試將這些表達式轉換為通用類型。這意味著表達式不一定需要是相同的類型。

將值從一種類型轉換為另一種類型的過程稱為類型強制 .類型強制可以是顯式的隱式 .

顯式類型強制,顧名思義,由程序員在代碼中顯式完成,使用 JavaScript 提供的內置方法(Number() , String() , Boolean() ...)。

例如:

// This would result in x being a number 42
let x = Number("42");

// Similarly,this would result in y being cast to the boolean value false 
let y = Boolean(0);

另一方面,隱式類型強制是由 JavaScript 隱式完成的。這種強制類型通常在我們對不同類型使用運算符時完成,但可以通過其中一種進行合理的“匹配”,例如:

// x is going to be cast to the string "1".
let x = 1 + ""; 

為了解釋這個例子,讓我們從 JavaScript 引擎的角度來看它:

綜上所述,JavaScript 引擎嘗試將這兩個值都轉換為支持
+ 的類型 運算符,在這種情況下是一個字符串。

/* In this case, the JS engine deduces that both the operands and the result have to be cast to an integer because it's the only type that has a defined subtraction operation (-) */

let y = "5" - "2";

// Because booleans don't have a + operation, the JS engine converts both true values into 1's

let z = true + true;

現在,== 正是這種類型的強制 運算符用於檢查是否相等。讓我們看一下 Node REPL 中使用鬆散相等運算符的一些示例:

> 42 == "42"
true
> "42" == '42'
true

42 , "42"'42' 都匹配到相同的數據類型,並且都鬆散相等,返回 true 在比較中。

布爾值遵循相同的原則:

> true == 1
true
> true + true == 2
true
> false == 0
true
> false + true == 1
true

true1false0 .我們可以通過相加將它們隱式轉換為整數。

最後,這是一個(不可讀)但在語法上有效的比較示例:

免費電子書:Git Essentials

查看我們的 Git 學習實踐指南,其中包含最佳實踐、行業認可的標準以及隨附的備忘單。停止谷歌搜索 Git 命令並真正學習 它!

> ("42" == '42') + (42 == "42") == 2
true

"42" == '42' 被評估為 true ,以及 42 == "42" .因此,表達式的這一側也計算為 true + true , 隱式轉換為 1+1 .這顯然是 ==2 ,所以表達式返回 true .

JavaScript 中的假值比較

一個假的 value 是一個變量,計算結果為 false .在 JavaScript 中,有七個 falsy 值 - false , 0 , "" , [] , null , undefined , NaN .

falsy 上使用雙等號運算符時有幾個簡單的規則 價值觀:

  • false , 0"" 是等價的
  • undefinednull 返回 true 當與自己或彼此相比時,false 與其他任何事物相比
  • NaN 與任何東西相比(甚至是另一個 NaN ) 返回 false

所以,這些都是 true

> false == 0;
true
> false == "";
true
> 0 == "";
true
> undefined == null;
true
> undefined == undefined;
true
> null == null;
true
> [] == false;
true
> [] == 0;
true

雖然這些都是 false

> undefined == false;
false
> 0 == null;
false
> null == true
false
> NaN == false;
false
> NaN == NaN;
false

JavaScript 中的嚴格等式運算符 (===)

JavaScript 中的三等號代表嚴格相等 .這意味著,與我們之前討論的鬆散相等運算符不同,它沒有隱式轉換。意味著輸出不會是 true 除非 類型價值觀 兩個表達式匹配。它們不再在類型上匹配。

現在,讓我們看一些嚴格相等運算符的示例:

> true === true
true
> true === 1
false
> false === 0
false

此示例生成 true 在第一種情況下,因為 type (布爾值)和 (true ) 相等。在其他兩種情況下,它返回 false ,因為儘管值相同,但類型不匹配。我們將布爾值與整數進行比較。

> 42 === 42
true
> 42 === "42"
false

在這裡,第一個示例中的數字和值都相等,導致 true ,而第二個示例中的值和類型不匹配,導致 false .

結論

在本文中,我們解釋了鬆散相等運算符之間的區別 和嚴格相等 JavaScript 中的運算符 .
我們還解釋了類型強制 是,以及顯式和隱式類型強制的概念。

您可能已經註意到,當我們在 JavaScript 中使用鬆散相等運算符時發生的隱式類型強制是非常不可預測的,這是違反直覺的。這就是為什麼,如果你對 JavaScript 不是很熟悉,在檢查兩個表達式是否相等時,通常最好堅持使用嚴格的相等運算符。

通過使用嚴格相等運算符,您可以同時測試類型和值,因此可以確保始終執行真正的相等測試。


Tutorial JavaScript 教程
  1. 探索功能標誌使用 AWS AppConfig

  2. DOM

  3. Twiliohackathon 項目 - ConnectShop

  4. 帶有 React 的打字稿

  5. 自適應加載 - 提高低端設備上的 Web 性能

  6. React Hook:檢查是否溢出

  7. SEO友好的無限滾動

  1. DOHackathon 上的 DevAnalytics:添加了更多統計數據

  2. 在 React 中使用 Axios 在搜索欄中取消以前的請求

  3. 學習解構

  4. 🙅🏼‍♀️ 我在啟動 Nodejs + MongoDb 時犯的錯誤

  5. 運行自己的 conf,無服務器方式

  6. 使用多個上下文順利測試 React 組件。

  7. Web 開發中的創新幻覺

  1. Cypress JS,是否有忽略一些網絡掛起調用

  2. JavaScript 和 TypeScript 中的 this

  3. 如何將 Google Analytics 和 Google AdSense 添加到您的下一個 JS 項目中!

  4. 在 Javascript 中創建和理解函數!