」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JavaScript 中的錯誤

JavaScript 中的錯誤

發佈於2024-09-02
瀏覽:478

The Bug in JavaScript

JavaScript 是全球數百萬前端開發人員中最受歡迎的語言,但與任何工具一樣,它也有其怪癖。

您有沒有想過當您在 null 上使用 typeof 運算子時會發生什麼?嗯,這是 JavaScript 中最奇怪、最令人困惑的事情之一。

typeof 運算子可以很好地處理像「Hello World」這樣的文字,因為它會傳回 string 作為其類型。對於 numbersboolean.

也是如此

但是,當涉及 null 時,您可能希望它返回類似 nullundefined 的內容,對嗎?但您可能會驚訝地發現,當我們在 null 上使用 typeof 運算子時,它實際上會傳回 object.

這個結果看起來很奇怪,很容易讓開發人員犯錯,尤其是剛接觸 JavaScript 的人。

但是為什麼 JavaScript 會這麼做呢?

要理解這一點,我們必須回到 20 世紀 90 年代 JavaScript 的早期。

當時,當語言首次開發時,其設計存在錯誤。值 null 被賦予了一個特殊的內部代碼,該內部代碼類似於用於物件的內部代碼。因此,當 typeof 運算子檢查 null 時,它會錯誤地將其識別為物件。

雖然這是一個意外錯誤,但它仍然被視為錯誤,因為它不符合邏輯。

不幸的是,這個錯誤已經存在了很長時間,現在修復它可能會破壞許多依賴當前行為的現有程式碼。

但隨著時間的推移,許多開發人員已經學會忍受它並找到解決方法。

這提醒我們所有人,無論使用多麼廣泛,沒有一種程式語言是完美的。

我們的想法是理解這些怪癖,成為更好的開發人員,並為下一代編寫更可靠且無錯誤的程式碼。


若想了解更多與 Web 開發和 AI 相關的內容,請隨時關注我。讓我們一起學習、成長吧!

版本聲明 本文轉載於:https://dev.to/zain725342/the-bug-in-javascript-58il?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何避免Go語言切片時的內存洩漏?
    如何避免Go語言切片時的內存洩漏?
    ,a [j:] ...雖然通常有效,但如果使用指針,可能會導致內存洩漏。這是因為原始的備份陣列保持完整,這意味著新切片外部指針引用的任何對象仍然可能佔據內存。 copy(a [i:] 對於k,n:= len(a)-j i,len(a); k
    程式設計 發佈於2025-04-30
  • Python讀取CSV文件UnicodeDecodeError終極解決方法
    Python讀取CSV文件UnicodeDecodeError終極解決方法
    在試圖使用已內置的CSV模塊讀取Python中時,CSV文件中的Unicode Decode Decode Decode Decode decode Error讀取,您可能會遇到錯誤的錯誤:無法解碼字節 在位置2-3中:截斷\ uxxxxxxxx逃脫當CSV文件包含特殊字符或Unicode的路徑逃...
    程式設計 發佈於2025-04-30
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mySQL組使用mySQL組進行查詢結果,在關係數據庫中使用MySQL組,轉移數據的數據是指重新排列的行和列的重排以增強數據可視化。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的轉換為基於列。 Let's consider the following ...
    程式設計 發佈於2025-04-30
  • 無Win32Exception獲取Process.MainModule.FileName方法
    無Win32Exception獲取Process.MainModule.FileName方法
    Accessing Process.MainModule.FileName Without a Win32 ExceptionWhen retrieving the path to running processes using the Process.GetProcessById method, ...
    程式設計 發佈於2025-04-30
  • 如何在Java字符串中有效替換多個子字符串?
    如何在Java字符串中有效替換多個子字符串?
    在java 中有效地替換多個substring,需要在需要替換一個字符串中的多個substring的情況下,很容易求助於重複應用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    程式設計 發佈於2025-04-30
  • Java中如何使用觀察者模式實現自定義事件?
    Java中如何使用觀察者模式實現自定義事件?
    在Java 中創建自定義事件的自定義事件在許多編程場景中都是無關緊要的,使組件能夠基於特定的觸發器相互通信。本文旨在解決以下內容:問題語句我們如何在Java中實現自定義事件以促進基於特定事件的對象之間的交互,定義了管理訂閱者的類界面。 以下代碼片段演示瞭如何使用觀察者模式創建自定義事件: args...
    程式設計 發佈於2025-04-30
  • 為什麼PYTZ最初顯示出意外的時區偏移?
    為什麼PYTZ最初顯示出意外的時區偏移?
    與pytz 最初從pytz獲得特定的偏移。例如,亞洲/hong_kong最初顯示一個七個小時37分鐘的偏移: 差異源利用本地化將時區分配給日期,使用了適當的時區名稱和偏移量。但是,直接使用DateTime構造器分配時區不允許進行正確的調整。 example pytz.timezone(&#...
    程式設計 發佈於2025-04-30
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    刪除匿名事件偵聽器將匿名事件偵聽器添加到元素中會提供靈活性和簡單性,但是當要刪除它們時,可以構成挑戰,而無需替換元素本身就可以替換一個問題。 element? element.addeventlistener(event,function(){/在這里工作/},false); 要解決此問題,請考...
    程式設計 發佈於2025-04-30
  • MySQL按日期篩選記錄:與今日對比
    MySQL按日期篩選記錄:與今日對比
    MySQL 日期時間比較查詢:大於等於今天 在 MySQL 中,您可能需要選擇創建日期時間字段大於等於當前日期的記錄。為此,您可以使用 CURDATE() 函數。 查詢語句如下: SELECT * FROM users WHERE created >= CURDATE(); CURDATE...
    程式設計 發佈於2025-04-30
  • 對象擬合:IE和Edge中的封面失敗,如何修復?
    對象擬合:IE和Edge中的封面失敗,如何修復?
    To resolve this issue, we employ a clever CSS solution that solves the problem:position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%)...
    程式設計 發佈於2025-04-30
  • Java數組中元素位置查找技巧
    Java數組中元素位置查找技巧
    在Java數組中檢索元素的位置 利用Java的反射API將數組轉換為列表中,允許您使用indexof方法。 (primitives)(鏈接到Mishax的解決方案) 用於排序陣列的數組此方法此方法返回元素的索引,如果發現了元素的索引,或一個負值,指示應放置元素的插入點。
    程式設計 發佈於2025-04-30
  • 為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    為什麼PHP的DateTime :: Modify('+1個月')會產生意外的結果?
    使用php dateTime修改月份:發現預期的行為在使用PHP的DateTime類時,添加或減去幾個月可能並不總是會產生預期的結果。正如文檔所警告的那樣,“當心”這些操作的“不像看起來那樣直觀。 考慮文檔中給出的示例:這是內部發生的事情: 現在在3月3日添加另一個月,因為2月在2001年只有2...
    程式設計 發佈於2025-04-30
  • 我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    我可以將加密從McRypt遷移到OpenSSL,並使用OpenSSL遷移MCRYPT加密數據?
    將我的加密庫從mcrypt升級到openssl 問題:是否可以將我的加密庫從McRypt升級到OpenSSL?如果是這樣,如何? 答案:是的,可以將您的Encryption庫從McRypt升級到OpenSSL。 可以使用openssl。 附加說明: [openssl_decrypt()函數要求...
    程式設計 發佈於2025-04-30
  • 同實例無需轉儲複製MySQL數據庫方法
    同實例無需轉儲複製MySQL數據庫方法
    在同一實例上複製一個MySQL數據庫而無需轉儲在同一mySQL實例上複製數據庫,而無需創建InterMediate sqql script。以下方法為傳統的轉儲和IMPORT過程提供了更簡單的替代方法。 直接管道數據 MySQL手動概述了一種允許將mysqldump直接輸出到MySQL cli...
    程式設計 發佈於2025-04-30
  • 解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    解決MySQL插入Emoji時出現的\\"字符串值錯誤\\"異常
    Resolving Incorrect String Value Exception When Inserting EmojiWhen attempting to insert a string containing emoji characters into a MySQL database us...
    程式設計 發佈於2025-04-30

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3