“==”和“===”,難道不是多一個的區別嗎?


摘要:在JS/TS項目里,除了能看到==操作符來判斷兩個變量是否相等外,我們還會看到===操作符,這兩者有什么區別嗎?

本文分享自華為雲社區《JavaScript/TypeScript里 == 和 === 的區別》,作者: gentle_zhou。

在JS/TS項目里,除了能看到==操作符來判斷兩個變量是否相等外,我們還會看到===操作符,這兩者有什么區別嗎?

先上結論,

  • 對於String, number這些基礎類型,==操作符會先把兩邊的變量進行類型強制轉換成相同的類型再比較是否相等;===操作符則不會進行類型轉換,而是直接進行比較。
  • 對於array, object這些高級類型,==和 ===是沒有區別的,因為它們比較的是 “指針地址” 。
  • 對於基礎類型和高級類型,== 和 ===是有區別的;==操作符會先把高級類型轉換為基礎類型之后,進行值的比較;===操作符則不會進行轉換,類型不同,直接返回false

也就是說,`==`操作符只要求比較兩個變量的值是否相等,`===`操作符則是要求兩個變量的值和類型都要相同;類似地,`!=`操作符會去做類型強制轉換,`!==`操作符則不會轉換類型。

我們寫個基礎類型變量的代碼示例一下:

66 ==  '66'; // 返回true

66 === '66' // 返回false

==操作符會把第一行里的字符串轉換成數字,與66再進行比較,值相等,於是返回true;===操作符則不會做類型轉換,因為左邊數字,右邊字符串,兩者類型不同,就會返回false。

注意

對於特殊值NaN(Not a Number),表示非數字,NaN和任何數(包括它自己)做相等比較,都會返回false,所以判斷NaN最好用isNaN()函數;

而對於undefined和null,兩者的值相比較,會返回true。

代碼示例如下:

NaN == 6; // 返回false
NaN === NaN; // 返回false
null == undefined; // 返回true
null === undefined; // 返回false

最后, 由於==和!=操作符帶來的類型隱式轉換規則非常繁瑣,還有為了避免數據類型混淆導致出現bug,還是推薦使用===操作符和!==操作符。

 

點擊關注,第一時間了解華為雲新鮮技術~


免責聲明!

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



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