1.介紹js的基本數據類型、引用類型、特殊類型前端
**基本數據類型**:String、Number、Boolean、undefined、null (es6新增Symbol) **引用類型**: function、Object **特殊類型**:undefined、null
2.原型鏈是什麼 ?
每一個對象都有一個prototype(原型),當訪問一個對象屬性時,若是不存在,那麼它就會去prototype裏找到這個屬性,這個prototype又會有本身的protoType,因而就一直找下去,造成原型鏈。nginx
3.JavaScript 如何實現繼承?程序員
(1)構造繼承 (2)原型繼承 (3)實例繼承 (4)拷貝繼承
4.null 和 undefined 有何區別?es6
null表示「無」的空值,轉換數值爲NAN; undefined :是一個表示"無"的原始值,轉換數值爲0
5.Ajax 是什麼?如何建立一個 Ajax ?面試
Ajax是異步; (1)建立XMLHttpRequest對象,也就是建立一個異步調用對象 (2)建立一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證信息 (3)設置響應HTTP請求狀態變化的函數 (4)發送HTTP請求 (5)獲取異步調用返回的數據 (6)使用JavaScript和DOM實現局部刷新
6.CMD和AMD的區別
CMD推崇依賴就近(requireJs實現),AMD推崇依賴前置(seaJs實現)正則表達式
7.DOM操做算法
(1)建立新節點 createDocumentFragment() //建立一個DOM片斷 createElement() //建立一個具體的元素 createTextNode() //建立一個文本節點 (2)添加、移除、替換、插入 appendChild() removeChild() replaceChild() insertBefore() //在已有的子節點前插入一個新的子節點 (3)查找 getElementsByTagName() //經過標籤名稱 getElementsByName() //經過元素的Name屬性的值(IE容錯能力較強,會獲得一個數組,其中包括id等於name值的) getElementById() //經過元素Id,惟一性
7.call和apply的做用是什麼?區別是什麼?json
call和apply的功能基本相同,都是實現繼承或者轉換對象指針的做用; 惟一不通的是前者參數是羅列出來的,後者是存到數組中的; call或apply功能就是實現繼承的;與面向對象的繼承extends功能類似;但寫法不一樣; 語法: .call(對象,args);//此地參數是指的是對象的參數,非方法的參數; .apply(對象,a1,a2,a3)//參數數組的形式:[參數1,參數2,......]
8.棧和堆的區別後端
1、堆棧空間分配區別: 一、棧(操做系統):由操做系統自動分配釋放 ,存放函數的參數值,局部變量的值等。其操做方式相似於數據結構中的棧; 二、堆(操做系統): 通常由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收,分配方式卻是相似於鏈表。 2、堆棧緩存方式區別: 一、棧使用的是一級緩存, 他們一般都是被調用時處於存儲空間中,調用完畢當即釋放; 二、堆是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定(並非一旦成爲孤兒對象就能被回收)。因此調用這些對象的速度要相對來得低一些。 3、堆棧數據結構區別: 堆(數據結構):堆能夠被當作是一棵樹,如:堆排序; 棧(數據結構):一種先進後出的數據結構。
9.JS的垃圾回收機制是什麼
垃圾回收機制指的是一塊被分配的內存即不能使用,又不能回收,知道瀏覽器進程結束。跨域
10.JS字符串操做函數
* concat() – 將兩個或多個字符的文本組合起來,返回一個新的字符串。 * indexOf() – 返回字符串中一個子串第一處出現的索引。若是沒有匹配項,返回 -1 。 * charAt() – 返回指定位置的字符。 * lastIndexOf() – 返回字符串中一個子串最後一處出現的索引,若是沒有匹配項,返回 -1 。 * match() – 檢查一個字符串是否匹配一個正則表達式。 * substr() 函數 -- 返回從string的startPos位置,長度爲length的字符串 * substring() – 返回字符串的一個子串。傳入參數是起始位置和結束位置。 * slice() – 提取字符串的一部分,並返回一個新字符串。 * replace() – 用來查找匹配一個正則表達式的字符串,而後使用新字符串代替匹配的字符串。 * search() – 執行一個正則表達式匹配查找。若是查找成功,返回字符串中匹配的索引值。不然返回 -1 。 * split() – 經過將字符串劃分紅子串,將一個字符串作成一個字符串數組。 * length – 返回字符串的長度,所謂字符串的長度是指其包含的字符的個數。 * toLowerCase() – 將整個字符串轉成小寫字母。 * toUpperCase() – 將整個字符串轉成大寫字母。
10.比較typeof與instanceof?
相同點:JavaScript 中 typeof 和 instanceof 經常使用來判斷一個變量是否爲空,或者是什麼類型的。
typeof的定義和用法:返回值是一個字符串,用來講明變量的數據類型。
Instanceof定義和用法:instanceof 用於判斷一個變量是否屬於某個對象的實例。
11. 跨域請求資源的方法
(1)、porxy代理
定義和用法:proxy代理用於將請求發送給後臺服務器,經過服務器來發送請求,而後將請求的結果傳遞給前端。
實現方法:經過nginx代理;
注意點:一、若是你代理的是https協議的請求,那麼你的proxy首先須要信任該證書(尤爲是自定義證書)或者忽略證書檢查,不然你的請求沒法成功。
(2)、CORS 【Cross-Origin Resource Sharing】
定義和用法:是現代瀏覽器支持跨域資源請求的一種最經常使用的方式。
使用方法:通常須要後端人員在處理請求數據的時候,添加容許跨域的相關操做。
(3)、jsonp
定義和用法:經過動態插入一個script標籤。瀏覽器對script的資源引用沒有同源限制,同時資源加載到頁面後會當即執行(沒有阻塞的狀況下)。
特色:經過狀況下,經過動態建立script來讀取他域的動態資源,獲取的數據通常爲json格式。
12.什麼是閉包
(1)函數內在嵌套函數 (2)內部函數能夠引用外層的參數變量 (3)參數變量不會被垃圾回收機制回收
13.什麼是防抖和節流
14.HTTP狀態碼
100 Continue 繼續,通常在發送post請求時,已發送了http header以後服務端將返回此信息,表示確認,以後發送具體參數信息 200 OK 正常返回信息 201 Created 請求成功而且服務器建立了新的資源 202 Accepted 服務器已接受請求,但還沒有處理 301 Moved Permanently 請求的網頁已永久移動到新位置。 302 Found 臨時性重定向。 303 See Other 臨時性重定向,且老是使用GET請求新的URI。 304 Not Modified 自從上次請求後,請求的網頁未修改過。 400 Bad Request 服務器沒法理解請求的格式,客戶端不該當嘗試再次使用相同的內容發起請求。 401 Unauthorized 請求未受權。 403 Forbidden 禁止訪問。 404 Not Found 找不到如何與URI相匹配的資源。 500 Internal Server Error 最多見的服務器端錯誤。 503 Service Unavailable服務器端暫時沒法處理請求(多是過載或維護)。
只須要記住(200,404,403,500,504)便可
15.淺拷貝和深拷貝的區別
淺複製:僅僅是指向被複制的內存地址,若是原地址發生改變,那麼淺複製出來的對象也會相應的改變。
深複製:在計算機中開闢一塊新的內存地址用於存放複製的對象。
16.["1","2","3"].map(parseInt) 的答案是多少?
[1,NaN,NaN] 由於 parseInt 須要兩個參數(val,radix),其中 radix 表示解析時用的基數。 map 傳了3個(element,index,array),對應的 radix 不合法致使解析失敗。