在這裏看到了一篇蠻有意義的的文章,一名【合格】前端工程師的自檢清單.javascript
看完以後感觸頗深,以爲本身距離一名合格的前端工程師還有差距,因而本身嘗試着對照着原做者本身整理的每一點,本身做了初步的解答,準備寫成文章,作一個記錄吧.前端
因爲這份自檢清單的點太多了,準備分不少期來作一個整理,若是有答得很差的點,歡迎你們指正,若是原文做者對於本文有任何問題,也歡迎指出,謝謝.java
JavaScript
規定了幾種語言類型規定了7種語言類型: null
、undefined
、String
、Number
、Boolean
、Object
、Symbol
,其中引用類型爲Object
,其他爲基本類型.數組
JavaScript
對象的底層數據結構是什麼Dictionary
,也就是字典安全
Symbol
類型在實際開發中的應用、可手動實現一個簡單的Symbol
Symbol表示獨一無二的值,它是一切非字符串的對象key的集合.Symbol
值經過Symbol
函數生成.在實際開發中,常常用於定義常量或者定義私有屬性.前端工程師
在實現Symbol
的時候,我發現Symbol
不少特性都沒法模擬,例如使用typeof
,結果爲"symbol",若是咱們要模擬實現一個Symbol
的話,基本的思路就是構建一個Symbol
函數,而後直接返回一個獨一無二的值.數據結構
JavaScript
中的變量在內存中的具體存儲形式基本類型是保存在棧內存中的簡單數據段,它們的值都有固定的大小,保存在棧空間,經過按值訪問.閉包
引用類型是保存在堆內存中的對象,值大小不固定,棧內存中存放的該對象的訪問地址指向堆內存中的對象,JavaScript
不容許直接訪問堆內存中的位置,所以操做對象時,實際操做對象的引用.app
String()
,Number()
,Boolean()
,Symbol()
函數
裝箱爲new xxxx(),拆箱爲toString()
,valueOf()
值類型,也就是基本類型;
引用類型開闢堆內存,會給全部賦值的對象添加一個引用,指向一個地址,因此引用類型會出現一處修改,到處變化.
null
和undefined
的區別undefined
爲變量初始化沒有賦具體的值,當聲明的變量還未被初始化時,變量的默認值爲undefined
.
null
表示爲變量爲空,或者對象爲空,即不會佔用內存,在清理內存佔用可使用null
賦值.
null == undefined; //true
null === undefined; //false
typeof undefined; // undefined
typeof null; //object
複製代碼
typeof
null
之外,都可以返回正確的結果;function
之外,一概返object
類型;null
,返回object
類型;function
返回function
類型;instanceof
instanceof
只能用來判斷兩個對象是否屬於實例關係,而不能判斷一個對象實例具體屬於哪一種類型.
constructor
null
和undefined
是無效的對象,所以是不會有constructor
存在的,這兩種類型的數據須要經過其餘方式來判斷;constructor
是不穩定的,這個主要體如今自定義對象上,當開發者重寫 prototype
後,原有的constructor
引用會丟失,constructor
會默認爲Object
toString
對於Object
對象,直接調用toString()
就能返回[object Object]
;而對於其餘對象,則須要經過call
/apply
來調用才能返回正確的類型信息.準確的判斷數組類型: Array.isArray()
隱式類型轉換的場景:
if
做判斷的時候+
運算操做時,1+'2' // '12'
轉換原則: 基本上大多數類型作隱式轉換時都會調用valueOf
和toString
如何避免:
===
替代==
;+
運算符作字符串與數字的直接運算應用:
if
判斷時能夠直接使用undefined
或者null
與布爾值的轉換、數字0和1與布爾值的轉換以及空字符串與布爾值的轉換let i = '1'
console.log(typeof(+i))
複製代碼
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
變量和類型這一塊的答案都寫了這麼多,後面的原型和原型鏈這些,可能就要花很大的篇幅來寫答案了,不過我仍是會堅持一直更新下去的,也是對本身的一個知識累積,加油吧!
系列連接: