前端中容易讓人忽略的知識點

来源:https://www.cnblogs.com/rope/archive/2019/10/11/11654160.html
-Advertisement-
Play Games

1、null 對於null有一個歷史存留的 bug,null是對象類型嗎?雖然我們使用 typeof 檢測null是對象類型,這其實是一個 bug。 1.1 原因是什麼 因為 JS 最初的版本是 32 位系統的,為了將性能將用低位存儲變數類型信息,000 開頭表示代表的是對象,此時null表示全零, ...


1、null

對於null有一個歷史存留的 bug,null是對象類型嗎?雖然我們使用 typeof 檢測null是對象類型,這其實是一個 bug。

1.1 原因是什麼

因為 JS 最初的版本是 32 位系統的,為了將性能將用低位存儲變數類型信息,000 開頭表示代表的是對象,此時null表示全零,所以系統就錯誤的將null判斷為對象類型。雖然 JS 內部判斷代碼已經更改,但是這個 bug 一直留存下來。

2、symbol

有關symbol使用的比較少,但是它的存在是有原因的。

2.1 symbol 是什麼

symbol表示獨一無二的值,因為由於對象的屬性都是字元串類型,我們避免不了相同字元串衝突的問題。所以為了防止對象的屬性都是字元串類型而衝突引入的。

2.2 symbol 的使用

 // 通常參數是字元串類型,如果為對象類型,就會調用 toString 方法
 let s1 = Symbol(參數);// 這個參數可以認為是 Symbol 實例的一個描述,用於區分
 
 // 第一種寫法
 let a = {};
 a[s1] = 'Hello!';
 
 // 第二種寫法
 let a = {
    [s1] = 'Hello';
}

3、為什麼 0.1 + 0.2 != 0.3

0.1 + 0.2 __ 0.3呢?為什麼會出現不相等的情況呢?面試該如何回答面試官?

3.1 是什麼導致了這種情況

原因很簡單,JS 採用的是雙精度版本,這個版本就存在精度問題,就導致了上邊這種情況。

3.2 內部的原理是什麼

我們電腦的信息全部轉化為二進位進行存儲的,那麼0.1的二進位表示的是一個無限迴圈小數,該版本的 JS 採用的是浮點數標準需要對這種無限迴圈的二進位進行截取,從而導致了精度丟失,造成了0.1不再是0.1,截取之後0.1變成了 0.100...001,0.2變成了0.200...002。所以兩者相加的數大於0.3。

那好,既然0.1不等於0.1了,那為什麼我在控制臺上輸出console.log(0.1)還等於0.1呢?

因為在輸入內容進行轉換的時候,二進位轉換成十進位,然後十進位轉換成字元串,在這個轉換的過程中發生了取近似值,所以列印出來的是一個近似值。

//可以通過原生的取近似值(四捨五入)的方法解決就可以了。 
parseFloat((0.1 + 0.2).toFixed(10))

待補充。。。
參考文章:https://juejin.im/post/5d9e932ff265da5bb065db1f


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

-Advertisement-
Play Games
更多相關文章
  • 使用jq寫選項卡,告別了繁瑣的迴圈以及命名規範 基本原理: 1.當某一個btn被選中時,將這個btn的背景顏色設為橘色,其餘兄弟btn背景顏色設為空(none) 2.如果子div與btn的索引相同,就將這個div顯示而其他兄弟div隱藏 1).css函數參數2的回調函數方法; 2).原生get方法再 ...
  • 我們知道,在創建一個函數時如果要用到變數來存取信息的話,要儘量使用局部變數。 因為一方面局部變數會隨著函數的執行結束被銷毀;另一方面在不執行函數的時候也不會創建這個局部變數,對節省空間資源有很大的好處。 下麵我們來看一個案例: 上面這個案例里的變數num就是一個典型的全局變數。 那麼我們要怎麼把nu ...
  • map()是underscore.js中一個處理數組和對象的方法。 params: 1. array || obj 2. callback 3. content 上下文指向 使用: 這個代碼如果我自己寫的話當然很簡單的想法了,就是判斷傳入參數類型,進行遍歷,然後判斷是否有回調,有的話,就執行,並將結 ...
  • 方法一: 新建個 Android studio 項目,用 webview 指定訪問你的頁面 方法二: 使用工具 cordova 附上地址:http://cordova.axuer.com/docs/zh-cn/latest/guide/platforms/android/index.html 方法三 ...
  • 我們在編寫網頁代碼時,首先應該做的就是設計好頁面的佈局形式,然後再往裡面填充內容。網頁佈局的好與壞,直接決定了網頁最終的展示效果。PC端常見的網頁佈局形式有兩列佈局、三列佈局等。在CSS中,我們通常使用浮動(float)、定位(position)、顯示模式(display)相關屬性結合使用,以達到預 ...
  • ant design螞蟻金服基於react打造的一個服務於企業級產品的UI框架。而ant design pro呢?就是基於Ant Design這個框架搭建的中後臺管理控制台的腳手架。 話不多說,今天給大家分享一個自己寫的一個組件。 源碼如下: index.tsx文件: index.less文件: A ...
  • 第一步準備一個json文件echarts.json(名字無所謂),用來模擬從後臺獲取數據 第二步在頁面直接引用JS文件 第三步在body中準備一個容器,寫好樣式,用來顯示圖表 最後一步在js中初始化echarts對象,實現動態載入數據。 ...
  • 簡介 1. Sass 和 Scss Sass 和 Scss 其實是同一種東西,我們平時都稱之為 Sass;Scss 是 Sass 3 引入新的語法,其語法完全相容 CSS3,並且繼承了 Sass 的強大功能。也就是說,任何標準的 CSS3 樣式表都是具有相同語義的有效的 Scss文件。 兩者之間不同 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...