本篇文章介紹面試中常常問的JS基礎知識點。文章中的關聯問題能夠在面試官問了問題後本身進行引伸這些相關話題,從而引導面試官詢問本身擅長的部分。後續會持續推出HTML知識點、CSS知識點、ES6知識點、JS進階知識點、webpack知識點、react知識點、組件設計相關知識點、瀏覽器相關知識點、網絡相關知識點、算法相關知識點等文章進行全面的知識梳理。react
Q: 基礎類型有哪些?
A: 基礎類型有 number、undefined、null、bollean、string、symbol。
關聯Q: 和對象類型的存儲有什麼區別?
關聯A: 基礎類型存儲在棧內存中,存儲的是值,是沒有函數能夠調用的。對象類型存儲在堆內存中,存儲的是地址。
關聯Q: null
是對象嗎?
關聯A: 雖然typeof null
輸出的是object
,可是null
實際上是基礎類型。這個錯誤是由於JS的最第一版本是32位系統,000開頭表明的是對象,而null
表示全零,因此被錯誤的判斷爲object
webpack
Q: typeof
能正確的判斷類型嗎?
A: 對於基礎類型,除了null
其他的基礎類型都能正確判斷類型,對於對象類型,除了函數都會顯示object
,因此不能準確區分類型。
關聯Q: instanceof能正確的判斷類型嗎?
關聯A: instanceof
能夠準確的判斷對象類型,由於內部機制是經過原型鏈來判斷的。可是它不能區分基礎類型,固然也能夠寫一個自定義類,修改Symbol.hasInstance
屬性來判斷基礎類型。
web
Q: == 和 === 有什麼區別?
A: ===
不須要進行類型轉換,只有類型相同,而且值相等時返回true
,==
須要進行類型轉換比較。
關聯Q: 類型轉換的規則是怎樣的?
關聯A: 先判斷類型是否相等,若是相等就判斷值是否相等;判斷類型是不是null
或者undefined
,若是是則返回true
;判斷類型是不是number
和string
,若是是則把string
轉成number
;判斷類型其中一方是不是boolean
,若是是則把boolean
轉成number
再進行比較;判斷類型其中一方是不是object
,且另外一方是string、number、symbol
若是是則把object
轉成原始類型在進行比較。對象轉原始類型會調用內置的Symbol.toPrimitive
函數。
面試
Q: 如何正確判斷this?
A: this的綁定規則有四種:默認綁定、隱式綁定、硬綁定、new綁定。new綁定的優先級最高,而後是硬綁定,而後是隱式綁定,最後是默認綁定。
關聯Q: 箭頭函數的this是什麼?
關聯A: 箭頭函數的this
取決於包裹箭頭函數的第一個普通函數的this
。
算法
Q: 什麼是閉包?
A: 閉包就是可以訪問另外一個函數做用域下的變量的函數。
關聯Q: 閉包有哪些使用場景?
關聯A: 封裝私有變量、模仿塊級做用域、實現JS的模塊。
瀏覽器
Q: 淺拷貝和深拷貝是什麼?
A: 淺拷貝只會拷貝全部屬性值到新對象中,若是屬性是對象拷貝的是地址。深拷貝會深層次的拷貝對象的值。
關聯Q: 如何實現淺拷貝和深拷貝?
關聯A: 淺拷貝能夠經過Object.assign
方法來實現,另外也能夠經過...
操做符來實現。深拷貝能夠經過JSON.parse(JSON.stringify(object))
來解決,可是這個方法會忽略undefined、symbol
,且不能序列化函數,不能解決循環引用的對象。若是拷貝的對象含有內置類型不包含函數,也可使用MessageChannel
來實現。
網絡
Q: 如何理解原型?如何理解原型鏈?
A: 每當定義一個對象時,對象都會包含一些預約義的屬性。其中每一個函數對象都有一個prototype
屬性,這個屬性指向函數的原型對象。原型鏈就是多個對象經過__proto__鏈接了起來。經過原型鏈能夠擁有定義在其餘對象中的屬性和方法。
關聯Q: 是否是全部函數都有prototype屬性?
關聯A: Function.prototype.bind()
就沒有這個屬性。
閉包