1. 程式人生 > >JavaScript面試基礎

JavaScript面試基礎

1.何時使用==和===

if(obj.a == null) {} 只有此時用==,其他時候用===,這是JQuery原始碼中推薦使用的寫法

2.JS中按照儲存方式分為:值型別,引用型別

值型別:賦值時不會互相干擾

引用型別:指標型別,會互相干擾,它不是值的拷貝

3.理解JSON

JSON是一個JS物件,也是一種資料格式

JSON.stringify({a:10,b:4})  轉換成字串

JSON.parse('{"a":10,"b":4}') 轉換成JSON物件

4.原型與原型鏈

用instanceof來判斷一個函式是否是一個變數的建構函式

5條原型規則:

★所有引用型別(陣列,物件,函式),都具有物件的特性,即:

    可自由擴充套件屬性(除了null外)


★所有引用型別(陣列,物件,函式),都有一個__proto__屬性(隱式原型),屬性值是一個普通的物件

★所有函式,都有一個prototype屬性(顯式原型),屬性值是一個普通的物件

★所有引用型別(陣列,物件,函式),__proto__屬性值指向它的建構函式的prototype屬性值

★當試圖得到一個物件的某個屬性值時,如果這個物件本身沒有這個屬性,那麼它會去它的__proto__(即它的建構函式的prototype)中尋找

問題:

如何準確判斷一個變數是陣列型別:


描述new一個物件的過程:

建立一個新物件,this指向這個新物件,執行程式碼(即對this賦值),隱式返回this

zeopto(或其他框架)原始碼中如何使用原型鏈


5.閉包使用場景

函式作為返回值

函式作為引數傳遞

作用域:自由變數,作用域鏈(自由變數的查詢),閉包的使用場景

閉包主要用於封裝變數,收斂許可權

6.this

作為建構函式執行

作為物件屬性執行

作為函式執行


7.非同步和單執行緒

使用非同步的場景:定時任務:setTimeout,setInterval;網路請求:ajax,動態img載入;事件繫結(都需要等待,等待過程不能阻塞)

同步與非同步的區別:同步會阻塞程式碼的執行,非同步不會(alert是同步執行)

8.其他

獲取2017-06-10的日期


獲取隨機數,要求長度一致的字串格式

(Math.random在前端中主要是為了清除快取)


寫一個能遍歷物件和陣列的通用forEach函式(陣列API(foeEach,every,some,filter,sort))


9.JS-Web-API

DOM本質:瀏覽器把拿到的html程式碼,結構化一個瀏覽器能識別並且js可操作的一個模型

attribute:html標籤的屬性

property:js物件標準屬性

DOM的基本資料結構:樹

10.BOM

如何檢測瀏覽器的型別

navigator.userAgent從這個字串裡來分析

拆解url的各部分

location.protocol返回協議

location.host返回主機

location.pathname

location.search

11.事件

通用事件繫結:



事件冒泡

DOM樹形結構,事件冒泡

e.stopPropatation()阻止冒泡

代理:程式碼簡潔,減少瀏覽器記憶體佔用

12.ajax

同源策略:不允許ajax訪問其他域的介面

可以跨域載入資源的三個標籤:

    <img src=xxx> 用於打點統計

    <link href=xx>  <script> 可以使用CDN

    <script src=xx> 可以使用JSONP

所有跨域請求都必須經過資訊提供方允許

JSONP實現原理:


在<script>標籤中定義window.callback函式,外域執行後返回的也正好是callback函式

也可以在伺服器端設定http header:


13.儲存

cookie,sessionStorage,localStorage的區別

cookie:本身用於客戶端與服務端通訊,但是它有本地儲存的功能,於是就被“借用”,使用document.cookie=...獲取和修改

cookie缺點:儲存量太小,所有http請求都帶著,會影響獲取資源的效率,API簡單,需要封裝才能用document.cookie=..

localStorage: API簡答易用

localStorage.setItem(key,value),localStorage.getItem(key)

sessionStorage:會話關閉後就會被清理

14.AMD

Require.js

全域性define函式

全域性require函式

依賴JS,會自動非同步載入



15.commJS

Commons不會非同步載入JS,而是同步一次性載入

AMD和commonJS使用場景:

要非同步載入用AMD,用NPM一般就用commonJS