成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

不要再到處使用 === 了

開發 前端
在本文中,我們將通過對比差異,理解強制性,研究一些流行的用例,并最終找到指導我們做出決定的準則,來深入了解該主題。

我們知道現在的開發人員都使用 === 來代替 ==,為什么呢?

我在網上看到的大多數教程都認為,要預測 JavaScript 強制轉換是如何工作這太復雜了,因此建議總是使用===。

這些都導致許多程序員將該語言的一部分排除在外,并將其視為一種缺陷,而不是去擴大他們的對該過程的理解。

下面通過兩個使用案例,說明使用 == 的好處。

1. 測試空值

  1. if (x == null) 
  2. vs 
  3. if (x === undefined || x === null) 

2. 讀取用戶的輸入

不要再到處使用 === 了

在本文中,我們將通過對比差異,理解強制性,研究一些流行的用例,并最終找到指導我們做出決定的準則,來深入了解該主題。

簡介

在Javascript中,相等由兩個運算符完成。

  • === —嚴格相等比較也稱為三等運算符。
  • == — 抽象的相等比較

我一直在使用===,因為我被告知它比==更好和更好,而且我根本不需要考慮它,作為一個懶惰的人,我覺得很方便。

直到我觀看了Kyle或[@getfiy][1]的[You Do n't Know JS][2]作者在Frontend Masters上的“ Deep JavaScript Foundations”。

作為一名專業的程序員,我沒有深入思考我每天工作中使用的操作符,這一事實激勵我去傳播意識,并鼓勵人們更多地理解和關注我們編寫的代碼。

事實的根源在哪里

知道真實的原因在哪里很重要。不是在 Mozilla 的 W3school 上,也不在聲稱===優于==的數百篇文章中,而且在這篇文章中也絕對沒有。。

在JavaScript規范中,我們可以找到關于JavaScript如何工作的[文檔][3]。

打破常識

(1) `==`只檢查值(松散)

如果看一下規范,從定義中可以很清楚地看出,算法要做的第一件事實際上就是檢查類型。

不要再到處使用 === 了

(2) `===`檢查值和類型(嚴格)

在這里,我們同樣可以從規范中看到,它檢查類型,如果它們不同,則不會再檢查值。

不要再到處使用 === 了

雙等號和三等號之間的真正區別是我們是否允許強制轉換。

JavaScript 中的強制轉換

強制轉換或類型轉換是任何編程語言的基礎之一。這對于動態類型化的語言(例如JavaScript)尤為重要,因為如果類型更改,編譯器不會對它大喊大叫,找它麻煩。

理解強制性意味著我們能夠以與JavaScript相同的方式解釋代碼,從而為我們提供了更大的可擴展性并最大程度地減少了錯誤。

(1) 顯性強制轉換

強制轉換可以在程序員調用這些方法之一時顯式發生,從而強制改變變量的類型。

Boolean(), Number(), BigInt(), String(), Object()

事例:

  1. let x = 'foo'
  2. typeof x // string 
  3. x = Boolean('foo') 
  4. typeof x // boolean 

(2) 隱藏轉換

在JavaScript中,變量的類型很弱,因此這意味著它們可以自動轉換(隱式強制)。當我們使用算術運算符+ / — *,周圍的上下文或使用==時,通常是這種情況。

  1. 2 / '3' // '3' 強制轉為  3 
  2. new Date() + 1 //  強制轉換為以1結尾的日期字符串 
  3. if(x) // x 被強制為布爾值 
  4. 1 == true // true 被強制為 1 
  5. 1 == 'true' // 'true' 被強制為  NaN 
  6. `this ${variable} will be coreced to string 

隱性強制是一把雙刃劍,合理使用可以增加可讀性,減少冗長。如果使用不當或被誤解,我們就會有一個讓人失望的公式,人們會咆哮并指責JavaScript。

比較的算法

(1) == 運算符號的算法

  • 如果X和Y是相同的類型,則執行===。
  • 如果X為null且Y未定義或反之,則為true。
  • 如果一個是數字,則將另一個強制為數字。
  • 如果一個是對象,則強制轉換為原始對象。
  • 其它,返回 false。

(2) === 比較的算法

  • 如果類型不匹配 false。
  • 如果類型匹配-比較值,為 NaN 時返回false。
  • -0 — true.

流行的用例

(1) 同類型(多數情況)

如果類型相同,則===與==完全相同。因此,應該使用語義性更強的那個。

  1. 1 == 1 // true       
  2. 'foo' == 'foo' // true   

類型不同,我更喜歡用 ===。

(2) 不同類型(原始類型)

首先,我想提醒您注意,不同類型并不意味著未知類型。不知道類型表明代碼中的問題比僅使用 === vs==更大。了解類型表明對代碼有更深入的理解,這會減少更多的錯誤。

假設我們有一個數字或字符串的可能性。請記住,算法更偏向數字類型,因此它將嘗試使用toNumber()

  1. let foo = 2
  2. let bar = 32; // number 還是 string 
  3. foo == bar // 如果 bar 是字符串,它會轉換成 number 
  4. foo === Number(bar) // doing basically the same 
  5. foo === bar //  bar 為 string 則該結果為 false 

(3) null和undefined

使用==時,null和undefined彼此相等。

  1. let foo = null 
  2. let bar = undefined;  
  3. foo == bar // true 
  4. foo === bar // false 

(4) 非原始類型[對象,數組]

不應該使用==或===來比較對象和數組等非原始類型的數據。

決策準則

  • 在所有可以使用的情況下,最好使用==。
  • ==具有已知類型,可以選擇強制類型轉換。
  • 知道類型總比不知道好。
  • 如果不知道類型,就不要使用==。
  • 當類型不匹配時,=== 是沒有意義的。
  • 當類型匹配時,===是不必要的。

避免使用 == 情況

在某些情況下,如果不真正了解JavaScript中的虛值,則不應使用==。

  1. == with 0 or "" or "   " 
  2. == with non primtives 
  3. == true  or  == false 

總結

根據我的經驗,到目前為止,我一直都知道我要處理的變量的類型,如果我不知道,我就使用typeof來只允許我所期望的變量。

需要注意的四點:

  • 如果你不知道變量類型,那么使用===是惟一合理的選擇
  • 不知道類型可能意味著你不理解代碼,請嘗試重構你的代碼
  • 知道類型可以編寫更好的代碼。
  • 如果類型已知,則最好使用==。

原文:

https://domnung.com/article/618194/learning//2020-01-30/medium.com/===-javascript-coercion-types-standing/stop-using-%3D%3D%3D-everywhere

責任編輯:趙寧寧 來源: 今日頭條
相關推薦

2020-03-20 14:35:11

數據分析方法數據

2020-12-01 11:18:34

對外接口枚舉

2022-10-08 06:49:32

LinuxWindows操作系統

2017-07-03 15:04:41

2017-11-20 09:00:43

跳槽職場精英年終獎

2020-04-03 08:30:44

RabbitMQKafka軟件

2019-11-18 10:05:43

程序員技能開發者

2019-11-18 10:16:37

工程師開發網絡

2017-02-09 08:21:04

ARAR游戲

2020-08-26 08:18:39

數據索引查詢

2010-11-16 10:57:06

OpenSSH開源技術

2009-12-01 13:31:49

2025-04-08 08:25:00

前端埋點線程

2024-02-19 09:38:58

2013-08-19 11:03:21

微軟谷歌

2014-12-31 10:33:44

Google 2015

2022-03-01 07:37:30

MySQL場景框架

2020-06-23 14:52:04

Python無用分號語言

2018-01-08 08:28:44

Linux命令

2022-09-06 10:35:29

安全密碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 看片地址| 色吊丝在线 | 欧美一区永久视频免费观看 | 亚洲国产精品va在线看黑人 | 在线视频日韩 | 国产羞羞视频在线观看 | 91精品国产综合久久精品图片 | 久久免费高清视频 | 中文字幕在线视频网站 | 欧美女优在线观看 | 日韩在线精品视频 | 欧美freesex黑人又粗又大 | 亚洲一区二区三区四区五区中文 | 亚洲电影在线播放 | 日韩亚洲视频 | 欧美小视频在线观看 | 国产成人精品在线 | 欧美日韩一二区 | a毛片| 国产伦精品一区二区三区高清 | 精品三区 | 亚洲一区二区成人 | 女人毛片a毛片久久人人 | 久久高清 | 中文天堂在线观看 | 国产视频一区二区 | 亚洲视频一区二区 | 欧美视频一级 | 日韩一区精品 | 久久伊人影院 | 狠狠综合久久av一区二区小说 | 不卡视频一区 | 国产精品自拍视频 | 国产精品久久久亚洲 | 亚洲人的av | 精品无码久久久久国产 | 成人小视频在线观看 | 久久99国产精品久久99果冻传媒 | 一级黄色录像毛片 | 韩日在线| www.99re|