一名【合格】前端工程師的自檢清單 - 答案版(JavaScript基礎篇)

契機

在這裏看到了一篇蠻有意義的的文章,一名【合格】前端工程師的自檢清單.javascript

看完以後感觸頗深,以爲本身距離一名合格的前端工程師還有差距,因而本身嘗試着對照着原做者本身整理的每一點,本身做了初步的解答,準備寫成文章,作一個記錄吧.前端

因爲這份自檢清單的點太多了,準備分不少期來作一個整理,若是有答得很差的點,歡迎你們指正,若是原文做者對於本文有任何問題,也歡迎指出,謝謝.java

1、JavaScript基礎

變量和類型

1.JavaScript規定了幾種語言類型

規定了7種語言類型: nullundefinedStringNumberBooleanObjectSymbol,其中引用類型爲Object,其他爲基本類型.數組

2.JavaScript對象的底層數據結構是什麼

Dictionary,也就是字典安全

3.Symbol類型在實際開發中的應用、可手動實現一個簡單的Symbol

Symbol表示獨一無二的值,它是一切非字符串的對象key的集合.Symbol 值經過Symbol函數生成.在實際開發中,常常用於定義常量或者定義私有屬性.前端工程師

在實現Symbol的時候,我發現Symbol不少特性都沒法模擬,例如使用typeof,結果爲"symbol",若是咱們要模擬實現一個Symbol的話,基本的思路就是構建一個Symbol函數,而後直接返回一個獨一無二的值.數據結構

4.JavaScript中的變量在內存中的具體存儲形式

基本類型是保存在棧內存中的簡單數據段,它們的值都有固定的大小,保存在棧空間,經過按值訪問.閉包

引用類型是保存在堆內存中的對象,值大小不固定,棧內存中存放的該對象的訪問地址指向堆內存中的對象,JavaScript不容許直接訪問堆內存中的位置,所以操做對象時,實際操做對象的引用.app

5.基本類型對應的內置對象,以及他們之間的裝箱拆箱操做

String(),Number(),Boolean(),Symbol()函數

裝箱爲new xxxx(),拆箱爲toString(),valueOf()

6.理解值類型和引用類型

值類型,也就是基本類型;

引用類型開闢堆內存,會給全部賦值的對象添加一個引用,指向一個地址,因此引用類型會出現一處修改,到處變化.

7.nullundefined的區別

undefined爲變量初始化沒有賦具體的值,當聲明的變量還未被初始化時,變量的默認值爲undefined.

null表示爲變量爲空,或者對象爲空,即不會佔用內存,在清理內存佔用可使用null賦值.

null == undefined; //true
null === undefined; //false
typeof undefined; // undefined
typeof null; //object
複製代碼

8.至少能夠說出三種判斷JavaScript數據類型的方式,以及他們的優缺點,如何準確的判斷數組類型

  1. typeof
  • 對於基本類型,除null之外,都可以返回正確的結果;
  • 對於引用類型,除function之外,一概返object類型;
  • 對於null,返回object類型;
  • 對於function返回function類型;
  1. instanceof instanceof只能用來判斷兩個對象是否屬於實例關係,而不能判斷一個對象實例具體屬於哪一種類型.

  2. constructor

  • nullundefined是無效的對象,所以是不會有constructor存在的,這兩種類型的數據須要經過其餘方式來判斷;
  • 函數的constructor是不穩定的,這個主要體如今自定義對象上,當開發者重寫 prototype後,原有的constructor引用會丟失,constructor會默認爲Object
  1. toString 對於Object對象,直接調用toString()就能返回[object Object];而對於其餘對象,則須要經過call/apply來調用才能返回正確的類型信息.

準確的判斷數組類型: Array.isArray()

9.可能發生隱式類型轉換的場景以及轉換原則,應如何避免或巧妙應用

隱式類型轉換的場景:

  • 使用if做判斷的時候
  • 運算符的轉換,例如在作+運算操做時,1+'2' // '12'
  • 對象的轉換

轉換原則: 基本上大多數類型作隱式轉換時都會調用valueOftoString

如何避免:

  • 在進行值比較時,使用===替代==;
  • 儘可能不要使用+運算符作字符串與數字的直接運算

應用:

  • 在作if判斷時能夠直接使用undefined或者null與布爾值的轉換、數字0和1與布爾值的轉換以及空字符串與布爾值的轉換
  • 把字符串類型轉換爲數字
let i = '1'
console.log(typeof(+i))
複製代碼

10.出現小數精度丟失的緣由,JavaScript能夠存儲的最大數字、最大安全數字,JavaScript處理大數字的方法、避免精度丟失的方法

  • 小數精度丟失的緣由:Number類型採用IEEE754標準中的「雙精度浮點數」來表示一個數字,不區分整數和浮點數.
  • 最大數字:Number.MAX_VALUE; // 1.7976931348623157e+308
  • 最小數字:Number.MIN_VALUE; // 5e-324
  • 最大安全數字:Number.MAX_SAFE_INTEGER; // 9007199254740991
  • 最小安全數字:Number.MIN_SAFE_INTEGER; // -9007199254740991
  • 處理大數字的方法:能夠採用字符串進行存儲和處理
  • 避免精度丟失的方法:能夠採用乘以10的倍數來擴大數字,再除以10的倍數,獲得準確的數值,還有能夠採用toFixed(0)

結語

變量和類型這一塊的答案都寫了這麼多,後面的原型和原型鏈這些,可能就要花很大的篇幅來寫答案了,不過我仍是會堅持一直更新下去的,也是對本身的一個知識累積,加油吧!

系列連接:

相關文章
相關標籤/搜索