為什麼你應該使用 Object.is() 進行相等性比較(譯)

来源:https://www.cnblogs.com/code-bug/archive/2020/01/20/12212957.html
-Advertisement-
Play Games

Title: Why you should use Object.is() in equality comparison Author: TarekAlQaddy Website: https://www.jstips.co/en/javascript/why-you-should-use-Obje ...


Title: Why you should use Object.is() in equality comparison

Author: TarekAlQaddy

Website: https://www.jstips.co/en/javascript/why-you-should-use-Object.is()-in-equality-comparison/

 


 

We all know that JavaScript is loosely typed and in some cases it fall behind specially when it comes to equality comparison with ‘==’, comparing with ‘==’ gives unexpected results due to whats called coercion or casting “converting one of the 2 operands to the other’s type then compare”.

我們都知道JavaScript是弱類型語言,在某些情況下,當與“ ==”進行相等性比較時,它特別落後。使用“ ==”進行比較可能會“將2個操作數中的一個強制轉換為另一種類型然後進行比較”而產生意外結果。

1 0 == ' ' //true
2 null == undefined //true
3 [1] == true //true

So they provided us with the triple equal operator ‘===’ which is more strict and does not coerce operands, However comparing with ‘===’ is not the best solution you can get:

因此Javascript提供了三等運算符,三等運算符更加嚴格並且不會將操作數進行強制類型轉換。然而三等運算符也不是最好的解決方案,也存在問題:

1 NaN === NaN //false

The great news that in ES6 there is the new ‘Object.is()’ which is better and more precise it has the same features as ‘===’ and moreover it behaves well in some special cases:

好消息是,在ES6中有一個新的“ Object.is()”,它更好,更精確,它具有與“ ===”相同的功能,而且在某些特殊情況下,其表現還不錯:

1 Object.is(0 , ' '); //false
2 Object.is(null, undefined); //false
3 Object.is([1], true); //false
4 Object.is(NaN, NaN); //true

Mozilla team doesn’t think that Object.is is “stricter” than ‘===’ they say that we should think of how this method deal with NaN, -0 and +0 but overall I think it is now a good practice in real applications.

Mozilla團隊不認為"Object.is()"比“ ===”更“嚴格”,應該考慮該方法如何處理NaN,-0和+0,但總的來說,我認為這是一種最佳實踐。

Now this table illustrates..

下表所示:

參考:

Object.is() - JavaScript | MDN

Equality comparisons and sameness


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 處理邊界情況 1. 用來訪問根組件 2. 用來從一個子組件訪問父組件的實例 3. 和 的用法 在組件上面使用 這個屬性綁定,屬性值自取,然後就可以通過 這種方式去獲取到指定組件的實例了。 其實不僅僅是組件能夠使用 ,標簽元素也能使用。 4. 依賴註入 現在我們有一個需求,如果我們存在多個組件嵌套的, ...
  • 自定義指令 1. 什麼是自定義指令 以 v 為首碼,然後加上自己定義好的名字組成的一個指令就是自定義指令。為什麼要有自定義指令呢?在有些時候,你仍然需要對普通的DOM元素進行底層的操作,這個時候就可以用到自定義指令。 2. 自定義指令的語法 1. 全局自定義指令 javascript // 註冊一個 ...
  • 博客園文章版權聲明(js自動生成) 一.代碼 ...
  • 事件註冊事件給元素添加事件,為註冊事件或者綁定事件註冊事件兩種方式傳統方式監聽事件方式事件監聽addEventListener() 事件監聽 (IE9以上)eventTarget.addEventListener(type, listener, [useCapture])參數type: 事件類型字元... ...
  • 字元串方法 search() 方法搜索特定值的字元串,並返回匹配的位置。 相比於indexOf(),search()可以設置更強大的搜索值(正則表達式) substring() 類似slice() ,兩個參數均為索引值, substr() 類似slice() ,第2個參數為長度,如果省略則長度直至末 ...
  • 針對近日華為,小米的部分機型,在升級系統或升級微信之後,微信內置瀏覽器產生的rem不能正確填充滿的問題,有如下解決方案 目前來看,產生這個情況的原因是因為給html附font-size時,附上的font-size和實際上html的font-size 大小並不一致 如圖: 在問題機型上展示的三個值 分 ...
  • 彈出輸入框會使視口高度發生變化,彈出輸入框後動態匹配這個高度 以下是使用jq的方法 $('input').on('blur', function () { setTimeout(function () { var scrollHeight = document.documentElement.scr ...
  • 問題1: 通過document.addEventListener("scroll",function(){})對頁面滾動監聽事件進行監聽,但ios下$(document).scrollTop()值始終為0,對頁面監聽無效。 原因: 因為iOS下iframe的高度會根據頁面的內容自適應,造成了ifra ...
一周排行
    -Advertisement-
    Play Games
  • 前言 插件化的需求主要源於對軟體架構靈活性的追求,特別是在開發大型、複雜或需要不斷更新的軟體系統時,插件化可以提高軟體系統的可擴展性、可定製性、隔離性、安全性、可維護性、模塊化、易於升級和更新以及支持第三方開發等方面的能力,從而滿足不斷變化的業務需求和技術挑戰。 一、插件化探索 在WPF中我們想要開 ...
  • 歡迎ReaLTaiizor是一個用戶友好的、以設計為中心的.NET WinForms項目控制項庫,包含廣泛的組件。您可以使用不同的主題選項對項目進行個性化設置,並自定義用戶控制項,以使您的應用程式更加專業。 項目地址:https://github.com/Taiizor/ReaLTaiizor 步驟1: ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • Channel 是乾什麼的 The System.Threading.Channels namespace provides a set of synchronization data structures for passing data between producers and consume ...
  • efcore如何優雅的實現按年分庫按月分表 介紹 本文ShardinfCore版本 本期主角: ShardingCore 一款ef-core下高性能、輕量級針對分表分庫讀寫分離的解決方案,具有零依賴、零學習成本、零業務代碼入侵適配 距離上次發文.net相關的已經有很久了,期間一直在從事java相關的 ...
  • 前言 Spacesniffer 是一個免費的文件掃描工具,通過使用樹狀圖可視化佈局,可以立即瞭解大文件夾的位置,幫助用戶處理找到這些文件夾 當前系統C盤空間 清理後系統C盤空間 下載 Spacesniffer 下載地址:https://spacesniffer.en.softonic.com/dow ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • 一、ReZero簡介 ReZero是一款.NET中間件 : 全網唯一開源界面操作就能生成API , 可以集成到任何.NET6+ API項目,無破壞性,也可讓非.NET用戶使用exe文件 免費開源:MIT最寬鬆協議 , 一直從事開源事業十年,一直堅持開源 1.1 純ReZero開發 適合.Net Co ...
  • 一:背景 1. 講故事 停了一個月沒有更新文章了,主要是忙於寫 C#內功修煉系列的PPT,現在基本上接近尾聲,可以回頭繼續更新這段時間分析dump的一些事故報告,有朋友微信上找到我,說他們的系統出現了大量的http超時,程式不響應處理了,讓我幫忙看下怎麼回事,dump也抓到了。 二:WinDbg分析 ...
  • 開始做項目管理了(本人3年java,來到這邊之後真沒想到...),天天開會溝通整理需求,他們講話的時候忙裡偷閑整理一下常用的方法,其實語言還是有共通性的,基本上看到方法名就大概能猜出來用法。出去打水的時候看到外面太陽好好,真想在外面坐著曬太陽,回來的時候好兄弟三年前送給我的鍵盤D鍵不靈了,在打"等待 ...