亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

JS不要再到處使用絕對等于運算符了

 更新時間:2021年04月30日 15:09:22   作者:淺笑·  
這篇文章主要介紹了JS不要再到處使用絕對等于運算符了,對此感興趣的同學(xué),可以參考下

概述

我們知道現(xiàn)在的開發(fā)人員都使用===來代替==,為什么呢?

我在網(wǎng)上看到的大多數(shù)教程都認(rèn)為,要預(yù)測JavaScript強制轉(zhuǎn)換是如何工作這太復(fù)雜了,因此建議總是使用===。

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

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

1.測試空值

if (x == null)
vs
if (x === undefined || x === null)

2.讀取用戶的輸入

let userInput = document.getElementById('amount');
let amount = 999;
if (amount == userInput)
vs
if (amout === Number(userInput))

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

簡介

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

1.=== —嚴(yán)格相等比較也稱為三等運算符。

2.== — 抽象的相等比較

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

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

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

事實的根源在哪里

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

在JavaScript規(guī)范中,我們可以找到關(guān)于JavaScript如何工作的文檔。

打破常識

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

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

2.===檢查值和類型(嚴(yán)格)

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

雙等號和三等號之間的真正區(qū)別是我們是否允許強制轉(zhuǎn)換。

JavaScript 中的強制轉(zhuǎn)換

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

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

顯性強制轉(zhuǎn)換

強制轉(zhuǎn)換可以在程序員調(diào)用這些方法之一時顯式發(fā)生,從而強制改變變量的類型。

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

事例:

let x = 'foo';
typeof x // string
x = Boolean('foo')
typeof x // boolean

隱藏轉(zhuǎn)換

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

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

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

比較的算法

== 運算符號的算法

1.如果X和Y是相同的類型,則執(zhí)行===。

2.如果X為null且Y未定義或反之,則為true。

3.如果一個是數(shù)字,則將另一個強制為數(shù)字。

4.如果一個是對象,則強制轉(zhuǎn)換為原始對象。

5.其它,返回false。

=== 比較的算法

1.如果類型不匹配false。

2.如果類型匹配-比較值,為NaN時返回false。

3.-0 — true.

流行的用例

1. 同類型(多數(shù)情況)

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

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

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

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

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

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

let foo = 2;
let bar = 32; // number 還是 string
foo == bar // 如果 bar 是字符串,它會轉(zhuǎn)換成 number
foo === Number(bar) // doing basically the same
foo === bar // 哪里 bar 為 string 則該結(jié)果為 false

3. null和undefined

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

let foo = null
let bar = undefined; 
foo == bar // true
foo === bar // false

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

不應(yīng)該使用==或===來比較對象和數(shù)組等非原始類型的數(shù)據(jù)。

決策準(zhǔn)則

1.在所有可以使用的情況下,最好使用==。

2.==具有已知類型,可以選擇強制類型轉(zhuǎn)換。

3.知道類型總比不知道好。

4.如果不知道類型,就不要使用==。

5.當(dāng)類型不匹配時,===是沒有意義的。

6.當(dāng)類型匹配時,===是不必要的。

避免使用 == 情況

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

== with 0 or "" or "   "
== with non primtives
== true  or  == false

總結(jié)

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

需要注意的四點

1.如果你不知道變量類型,那么使用===是惟一合理的選擇

2.不知道類型可能意味著你不理解代碼,請嘗試重構(gòu)你的代碼

3.知道類型可以編寫更好的代碼。

4.如果類型已知,則最好使用==。

以上就是JS不要再到處使用絕對等于運算符了的詳細(xì)內(nèi)容,更多關(guān)于JS的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS實現(xiàn)的自定義網(wǎng)頁拖動類

    JS實現(xiàn)的自定義網(wǎng)頁拖動類

    這篇文章主要介紹了JS實現(xiàn)的自定義網(wǎng)頁拖動類,涉及頁面元素響應(yīng)鼠標(biāo)事件動態(tài)改變屬性的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2015-11-11
  • 用JavaScript實現(xiàn)PHP的urlencode與urldecode函數(shù)

    用JavaScript實現(xiàn)PHP的urlencode與urldecode函數(shù)

    這篇文章主要介紹了用JavaScript實現(xiàn)PHP的urlencode與urldecode函數(shù),很多情況下我們用了出來php urlencode出來的網(wǎng)址,需要的朋友可以參考下
    2015-08-08
  • JavaScript點擊按鈕生成4位隨機驗證碼

    JavaScript點擊按鈕生成4位隨機驗證碼

    這篇文章主要為大家詳細(xì)介紹了JavaScript點擊按鈕生成4位隨機驗證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 利用JS實現(xiàn)scroll自定義滾動效果詳解

    利用JS實現(xiàn)scroll自定義滾動效果詳解

    這篇文章主要給大家介紹了關(guān)于利用JS如何實現(xiàn)scroll自定義滾動效果的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-10-10
  • 解析Javascript中難以理解的11個問題

    解析Javascript中難以理解的11個問題

    這篇文章主要是對Javascript中難以理解的11個問題進行了詳細(xì)的分析介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • Ajax使用原生態(tài)JS驗證用戶名是否存在

    Ajax使用原生態(tài)JS驗證用戶名是否存在

    這篇文章主要為大家詳細(xì)介紹了Ajax使用原生態(tài)JS驗證用戶名是否存在的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 微信小程序保存圖片到相冊權(quán)限設(shè)置

    微信小程序保存圖片到相冊權(quán)限設(shè)置

    這篇文章主要為大家詳細(xì)介紹了微信小程序保存圖片到相冊權(quán)限設(shè)置,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • 原生js的數(shù)組除重復(fù)簡單實例

    原生js的數(shù)組除重復(fù)簡單實例

    下面小編就為大家?guī)硪黄鷍s的數(shù)組除重復(fù)簡單實例。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • JavaScript使用arcgis實現(xiàn)截圖截屏功能

    JavaScript使用arcgis實現(xiàn)截圖截屏功能

    這篇文章主要為大家詳細(xì)介紹了JavaScript如何使用arcgis實現(xiàn)截圖截屏功能,類似于qq截圖,文中的示例代碼講解詳細(xì),需要的可以參考一下
    2024-01-01
  • 一個不錯的js html頁面倒計時可精確到秒

    一個不錯的js html頁面倒計時可精確到秒

    這篇文章主要介紹了一個不錯的js html頁面倒計時可精確到秒,很簡單,但和實用,需要的朋友可以參考下
    2014-10-10

最新評論