《一名【合格】前端工程師的自檢清單》答案參考(一)

七劍下天山發表於2019-04-28

開篇

最近這個文章很火,列了【合格】前端工程師需要掌握的技能表,看到作者一直不斷自省和學習來保持競爭力,同為前端工程師深感慚愧,故寫下此文簡要回答一下文章裡提到的技術問題,技術一般,大家僅僅當做參考就成,文章很長會分多篇來寫。

傳送門 一名【合格】前端工程師的自檢清單

JavaScript基礎

變數和型別

  1. JavaScript規定了幾種資料型別
    7種,根據堆疊儲存方式的不同分為簡單型別和複雜型別

    • 簡單型別:stringnumberbooleannullundefinedsymbol(ES6新增,表示獨一無二的值)
    • 複雜型別:object
  2. JavaScript物件的底層結構是什麼
    不甚瞭解,不敢妄言

  3. Symbol型別在實際開發中的應用,手寫Symbol
    Symbol表示一個獨一無二的值,如果我們使用了一個他人提供的物件,要為此物件新增方法,那麼必須保證屬性名不能衝突,使用Symbol就能很好的保證這一點,Symbol與任何值都不相等!這個東西瞭解不深,傳送門-ES6標準入門-Symobl

  4. JavaScript中的變數具體儲存形式
    變數的儲存方式取決於變數的型別是基本型別還是引用型別

    • 基本型別:以鍵值對的方式儲存在棧記憶體中
    • 複雜型別:會在堆記憶體中開闢一塊空間,儲存這個物件的值,並同時在棧記憶體中儲存變數和指向物件的指標
      來源:《JavaScript高階程式設計》69頁
  5. 基本型別對應的內建物件,以及他們之間的裝箱拆箱操作
    這個說的是基本包裝型別,我也理解不深,直接看《JavaScript高階程式設計》119頁

  6. 理解值型別和引用型別
    這個和4一樣,值型別就是基本型別,引用型別就是複雜型別

  7. nullundefined的區別
    null表示空物件指標,將null賦值給變數,就表示該變數指向空物件
    undefined表示未定義,宣告一個變數但不初始化,那麼它的值就是undefined
    null主要表示一個變數還沒有真正儲存物件的時候,它的值就應該為null,這是意料之中的空,而undefined通常表示意料之外的內容,如未初始化的變數,一般來說我們不應該顯式的使用undefined
    來源《JavaScript高階程式設計》24頁

  8. 至少可以說出三種判斷JavaScript資料型別的方式,以及他們的優缺點,如何準確的判斷陣列型別

    • typeof操作符,可以判斷基本資料型別,對於引用資料型別全都返回Object
    • instanceof操作符,obj instanceof Object 檢測Object.prototype是否存在於引數obj的原型鏈上,主要用來判斷變數是否是某個建構函式的例項,但是Object是所有物件的原型,所以在obj instanceof Object中,無論引數obj是陣列還是函式都會返回true
    • constructorprototype物件上的屬性,指向建構函式。根據例項物件尋找屬性的順序,若例項物件上沒有例項屬性或方法時,就去原型鏈上尋找,因此,例項物件也是能使用constructor屬性的,同樣的這個也只能輸出建構函式

    如需判斷基本資料型別,使用typeof,判斷引用型別用instanceofconstructor,實際上所有引用型別都是物件,只不過建構函式不同罷了,強行判斷引用型別,要麼只是判斷常見的幾種引用型別比如陣列,函式,Date,正則等等,要麼只能輸出建構函式

    準確判斷陣列型別使用es5提供的方法Array.isArray(value)
    來源《JavaScript高階程式設計》83頁,一整章

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

    • Boolean 場景,變數放在if的判斷語句時,如果變數不是布林值,那麼就會發生隱式轉換
      • String,非空字串會轉換成true,空字串會轉換成false
      • Number, 非0會轉換成true,0會轉換成false
      • Object,任何物件都會轉成true

    當然Numebr也會發生隱式轉換,不過這個一般用不到,也很簡單 來源《JavaScript高階程式設計》26頁

  10. 出現小數精度丟失的原因,JavaScript可以儲存的最大數字、最大安全數字,JavaScript處理大數字的方法、避免精度丟失的方法

    • 精度丟失原因,說是JavaScript使用了IEEE 754規範,二進位制儲存十進位制的小數時不能完整的表示小數
    • 能夠表示的最大數字Number.MAX_VALUE等於1.7976931348623157e+308,最大安全數字Number.MAX_SAFE_INTEGER等於9007199254740991
    • 避免精度丟失
      • 計算小數時,先乘100或1000,變成整數再運算
      • 如果值超出了安全整數,有一個最新提案,BigInt大整數,它可以表示任意大小的整數,注意只能表示整數,而不受安全整數的限制

    來源ES6標準入門、《JavaScript高階程式設計》29頁

先寫10個吧,太累了,果然,合格不是那麼好達到的,加油吧!!!

github,歡迎issue

相關文章