1. 程式人生 > >js面試題精講---(下)

js面試題精講---(下)

https://buluo.qq.com/p/detail.html?bid=325612&pid=3458876-1467378136

46、HTTP協議中,GET和POST有什麼區別?分別適用什麼場景 ?

get傳送的資料長度有限制,post沒有

get通過url傳遞,在瀏覽器位址列可見,post是在報文中傳遞

適用場景:

post一般用於表單提交

get一般用於簡單的資料查詢,嚴格要求不是那麼高的場景

47、HTTP狀態訊息200 302 304 403 404 500分別表示什麼

200:請求已成功,請求所希望的響應頭或資料體將隨此響應返回。

302:請求的資源臨時從不同的 URI響應請求。由於這樣的重定向是臨時的,客戶端應當繼續向原有地址傳送以後的請求。只有在Cache-Control或Expires中進行了指定的情況下,這個響應才是可快取的

304:如果客戶端傳送了一個帶條件的 GET 請求且該請求已被允許,而文件的內容(自上次訪問以來或者根據請求的條件)並沒有改變,則伺服器應當返回這個狀態碼。304響應禁止包含訊息體,因此始終以訊息頭後的第一個空行結尾。

403:伺服器已經理解請求,但是拒絕執行它。

404:請求失敗,請求所希望得到的資源未被在伺服器上發現。

500:伺服器遇到了一個未曾預料的狀況,導致了它無法完成對請求的處理。一般來說,這個問題都會在伺服器端的原始碼出現錯誤時出現。

48、HTTP協議中,header資訊裡面,怎麼控制頁面失效時間(last-modified,cache-control,Expires分別代表什麼)

Last-Modified

文 檔的最後改動時間。客戶可以通過If-Modified-Since請求頭提供一個日期,該請求將被視為一個條件GET,只有改動時間遲於指定時間的文件 才會返回,否則返回一個304Not Modified)狀態。Last-Modified也可用setDateHeader方法來設定。

Expires

應該在什麼時候認為文件已經過期,從而不再快取它?

49、請列舉js陣列型別中的常用方法

方法

描述

concat()

連線兩個或更多的陣列,並返回結果。

把陣列的所有元素放入一個字串。元素通過指定的分隔符進行分隔。

pop()

刪除並返回陣列的最後一個元素

向陣列的末尾新增一個或更多元素,並返回新的長度。

刪除並返回陣列的第一個元素

從某個已有的陣列返回選定的元素

對陣列的元素進行排序

刪除元素,並向陣列新增新元素。

把陣列轉換為字串,並返回結果。

向陣列的開頭新增一個或更多元素,並返回新的長度。

50、列舉常用的js框架以及分別適用的領域

jquery:簡化了js的一些操作,並且提供了一些非常好用的API

jquery ui、jquery-easyui:在jqeury的基礎上提供了一些常用的元件 日期,下拉框,表格這些元件

require.js、sea.js(阿里的玉帛)+》模組化開發使用的

jquery mobile:是jquery自己出的支援移動端網頁開發,不過非常笨重,但是功能非常強大

zepto:精簡版的jquery,常用於手機web前端開發 提供了一些手機頁面實用功能,touch

ext.js:跟jquery差不多,但是不開源,也沒有jquery輕量

angular、knockoutjs、avalon(去哪兒前端總監,作者:司徒正美):MV*框架,適合用於單頁應用開發(SPA)

51、如何獲取物件a擁有的所有屬性(可列舉的、不可列舉的,不包括繼承來的屬性)

Object.keys——IE9+ ES5

或者使用for…in並過濾出繼承的屬性

for(o in obj){

  if(obj.hasOwnproperty(o)){//判斷o不是繼承來的屬性

    //把o這個屬性放入到一個數組中

}

}

52、三種彈窗的單詞以及三種彈窗的功能

alert

confirm

prompt

53、寫一個post請求並帶有傳送資料和返回資料的樣例

$.ajax({    url:"1.html",    data:{name:"張三",age:18},//post資料    dataType:"json",    type:"POST",    success:function(data){        //data:返回的資料    },    error:function(){        //異常處理    }});

54、jQuery框架中$.ajax()的常用引數有哪些?

type

型別:String

預設值: "GET")。請求方式 ("POST" 或 "GET"), 預設為 "GET"。注意:其它 HTTP 請求方法,如 PUT 和 DELETE 也可以使用,但僅部分瀏覽器支援。

url

型別:String

預設值: 當前頁地址。傳送請求的地址。

success

型別:Function

請求成功後的回撥函式。

引數:由伺服器返回,並根據 dataType 引數進行處理後的資料;描述狀態的字串。

這是一個 Ajax 事件。

options

型別:Object

可選。AJAX 請求設定。所有選項都是可選的。

async

型別:Boolean

預設值: true。預設設定下,所有請求均為非同步請求。如果需要傳送同步請求,請將此選項設定為 false

注意,同步請求將鎖住瀏覽器,使用者其它操作必須等待請求完成才可以執行。

beforeSend(XHR)

型別:Function

傳送請求前可修改 XMLHttpRequest 物件的函式,如新增自定義 HTTP 頭。

XMLHttpRequest 物件是唯一的引數。

這是一個 Ajax 事件。如果返回 false 可以取消本次 ajax 請求。

cache

型別:Boolean

預設值: truedataType 為 script 和 jsonp 時預設為 false。設定為 false 將不快取此頁面。

jQuery 1.2 新功能。

contentType

型別:String

預設值: "application/x-www-form-urlencoded"。傳送資訊至伺服器時內容編碼型別。

預設值適合大多數情況。如果你明確地傳遞了一個 content-type 給 $.ajax() 那麼它必定會發送給伺服器(即使沒有資料要傳送)。

data

型別:String

傳送到伺服器的資料。將自動轉換為請求字串格式。GET 請求中將附加在 URL 後。檢視processData 選項說明以禁止此自動轉換。必須為 Key/Value 格式。如果為陣列,jQuery將自動為不同值對應同一個名稱。如 {foo:["bar1", "bar2"]} 轉換為'&foo=bar1&foo=bar2'

dataFilter

型別:Function

給 Ajax 返回的原始資料的進行預處理的函式。提供 data 和 type 兩個引數:data Ajax 返回的原始資料,type 是呼叫 jQuery.ajax 時提供的 dataType 引數。函式返回的值將由 jQuery 進一步處理。

dataType

型別:String

預期伺服器返回的資料型別。如果不指定,jQuery 將自動根據 HTTP 包 MIME 資訊來智慧判斷,比如 XML MIME 型別就被識別為 XML。在 1.4 中,JSON 就會生成一個JavaScript 物件,而 script 則會執行這個指令碼。隨後伺服器端返回的資料會根據這個值解析後,傳遞給回撥函式。可用值:

· "xml": 返回 XML 文件,可用 jQuery 處理。

· "html": 返回純文字 HTML 資訊;包含的 script 標籤會在插入 dom 時執行。

· "script": 返回純文字 JavaScript 程式碼。不會自動快取結果。除非設定了 "cache"引數。注意:在遠端請求時(不在同一個域下),所有 POST 請求都將轉為 GET 請求。(因為將使用 DOM 的 script標籤來載入)

· "json": 返回 JSON 資料 。

· "jsonp": JSONP 格式。使用 JSONP 形式呼叫函式時,如 "myurl?callback=?" jQuery 將自動替換 為正確的函式名,以執行回撥函式。

· "text": 返回純文字字串

error

型別:Function

預設值: 自動判斷 (xml 或 html)。請求失敗時呼叫此函式。

有以下三個引數:XMLHttpRequest 物件、錯誤資訊、(可選)捕獲的異常物件。

如果發生了錯誤,錯誤資訊(第二個引數)除了得到 null 之外,還可能是 "timeout", "error", "notmodified" 和 "parsererror"

這是一個 Ajax 事件。

55、閉包:下面這個ul,如何點選每一列的時候alert其index?

<ul id="test">

<li>這是第一條</li>

<li>這是第二條</li>

<li>這是第三條</li>

</ul>

//非閉包實現

var lis=document.querySelectorAll('li');document.querySelector('#test').onclick=function(e){    for (var i = 0; i < lis.length; i++) {        var li = lis[i];        if(li==e.target){            alert(i);        }    }};

//閉包實現

var lis=document.querySelectorAll('li');for (var i = 0; i < lis.length; i++) {    var li = lis[i];    li.onclick=(function(index){        return function(e){            alert(index);        };    })(i);}

56、Javascript中callee和caller的作用?

caller是返回一個對函式的引用,該函式呼叫了當前函式;

用法:fn.caller

callee是返回正在被執行的function函式,也就是所指定的function物件的正文。

用法:arguments.callee

57、在Javascript中什麼是偽陣列?如何將偽陣列轉化為標準陣列?

偽陣列(類陣列):無法直接呼叫陣列方法或期望length屬性有什麼特殊的行為,但仍可以對真正陣列遍歷方法來遍歷它們。典型的是函式的argument引數,還有像呼叫getElementsByTagName,document.childNodes之類的,它們都返回NodeList物件都屬於偽陣列。

可以使用Array.prototype.slice.call(fakeArray)將陣列轉化為真正的Array物件。

58、《正則》寫出正確的正則表示式匹配固話號,區號3-4位,第一位為0,中橫線,7-8位數字,中橫線,3-4位分機號格式的固話號

常用正則表示式語法要熟悉

/0[0-9]{2,3}-\d{7,8}/  010 021 020 025 028 0755:深圳

59、程式中捕獲異常的方法?

window.error=function(){};   try{}catch(){}finally{}

60、給字串擴充套件一個相容所有瀏覽器的清除前後的空格的方法

if (!String.prototype.trim) {

String.prototype.trim = function() {

return this.replace(/^\s+/, "").replace(/\s+$/,"");

} }

61、jQuery 的 slideUp動畫 ,如果目標元素是被外部事件驅動, 當滑鼠快速地連續觸發外部元素事件, 動畫會滯後的反覆執行,該如何處理呢?

先stop(true,true)後slideUp()

stop(true,true)停止所有動畫 ,去的路程中點選停止會直接到達終點,若是返回過程中再點選,會停止到在起點

.stop() 停止當前動畫,沿路返回起點,若是返回過程中再點選,會暫停在路中

.stop(true) 停止所有動畫 去的路程中點選停止會直接到達終點,若是返回過程中再點選,會暫停在路中

第一個引數的意思是是否清空動畫序列,也就是stop的是當前元素的動畫效果還是停止後面附帶的所有動畫效果,一般為false,跳過當前動畫效果,執行下一個動畫效果;第二個引數是是否將當前動畫效果執行到最後,意思就是停止當前動畫的時候動畫效果剛剛執行了一般,這個時候想要的是動畫執行之後的效果,那麼這個引數就為true。否則動畫效果就會停在stop執行的時候。

62、Ajax 是什麼? 如何建立一個Ajax?

Ajax並不算是一種新的技術,全稱是asynchronous javascript and xml,可以說是已有技術的組合,主要用來實現客戶端與伺服器端的非同步通訊效果,實現頁面的區域性重新整理,早期的瀏覽器並不能原生支援ajax,可以使用隱藏幀(iframe)方式變相實現非同步效果,後來的瀏覽器提供了對ajax的原生支援

使用ajax原生方式傳送請求主要通過XMLHttpRequest(標準瀏覽器)、ActiveXObject(IE瀏覽器)物件實現非同步通訊效果

基本步驟:

var xhr =null;//建立物件

if(window.XMLHttpRequest){

xhr = new XMLHttpRequest();

}else{

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

     xhr.open(“方式”,”地址”,”標誌位”);//初始化請求

     xhr.setRequestHeader(“”,””);//設定http頭資訊

     xhr.onreadystatechange =function(){}//指定回撥函式

     xhr.send();//傳送請求 

63、同步和非同步的區別?

同步:阻塞的

-張三叫李四去吃飯,李四一直忙得不停,張三一直等著,直到李四忙完兩個人一塊去吃飯

=瀏覽器向伺服器請求資料,伺服器比較忙,瀏覽器一直等著(頁面白屏),直到伺服器返回資料,瀏覽器才能顯示頁面

非同步:非阻塞的

-張三叫李四去吃飯,李四在忙,張三說了一聲然後自己就去吃飯了,李四忙完後自己去吃

=瀏覽器向伺服器請求資料,伺服器比較忙,瀏覽器可以自如的幹原來的事情(顯示頁面),伺服器返回資料的時候通知瀏覽器一聲,瀏覽器把返回的資料再渲染到頁面,區域性更新

64、GET和POST的區別,何時使用POST?

GET:一般用於資訊獲取,使用URL傳遞引數,對所傳送資訊的數量也有限制,一般在2000個字元,有的瀏覽器是8000個字元

POST:一般用於修改伺服器上的資源,對所傳送的資訊沒有限制

在以下情況中,請使用 POST 請求:

1. 無法使用快取檔案(更新伺服器上的檔案或資料庫)

2. 向伺服器傳送大量資料(POST 沒有資料量限制)

3. 傳送包含未知字元的使用者輸入時,POST 比 GET 更穩定也更可靠

65、ajax的缺點

1、ajax不支援瀏覽器back按鈕。

 2、安全問題 AJAX暴露了與伺服器互動的細節。

 3、對搜尋引擎的支援比較弱。//不會執行你的js指令碼,只會操作你的網頁原始碼

 4、破壞了程式的異常機制。

 5、無法跨域請求,解決方式:jsonp

66、http常見的狀態碼有那些?分別代表是什麼意思?

200 OK      //客戶端請求成功

400 Bad Request  //客戶端請求有語法錯誤,不能被伺服器所理解

403 Forbidden  //伺服器收到請求,但是拒絕提供服務

404 Not Found  //請求資源不存在,輸入了錯誤的URL

500 Internal Server Error //伺服器發生不可預期的錯誤

503 Server Unavailable  //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常

67、嚴格模式

連結:網頁連結

全域性變數顯式宣告

靜態繫結

禁止使用with語句

eval中定義的變數都是區域性變數

禁止this關鍵字指向全域性物件

禁止在函式內部遍歷呼叫棧 arguments.callee

嚴格模式下無法刪除變數。只有configurable設定為true的物件屬性,才能被刪除

正常模式下,對一個物件的只讀屬性進行賦值,不會報錯,只會默默地失敗。嚴格模式下,將報錯。

嚴格模式下,對一個使用getter方法讀取的屬性進行賦值,會報錯。

嚴格模式下,對禁止擴充套件的物件新增新屬性,會報錯。

嚴格模式下,刪除一個不可刪除的屬性,會報錯。

正常模式下,如果物件有多個重名屬性,最後賦值的那個屬性會覆蓋前面的值。嚴格模式下,這屬於語法錯誤。

正常模式下,如果函式有多個重名的引數,可以用arguments[i]讀取。嚴格模式下,這屬於語法錯誤。

正常模式下,整數的第一位如果是0,表示這是八進位制數,比如0100等於十進位制的64。嚴格模式禁止這種表示法,整數第一位為0,將報錯。

不允許對arguments賦值

arguments不再追蹤引數的變化

禁止使用arguments.callee

嚴格模式只允許在全域性作用域或函式作用域的頂層宣告函式。也就是說,不允許在非函式的程式碼塊內宣告函式

if else while for 無法宣告函式

嚴格模式新增了一些保留字:implements, interface, let, package, private, protected, public, static, yield

68、new操作符具體幹了什麼呢?

1、建立一個空物件,並且 this 變數引用該物件,同時還繼承了該函式的原型。

 2、屬性和方法被加入到 this 引用的物件中。

 3、新建立的物件由 this 所引用,並且最後隱式的返回 this 。

69、模組化開發怎麼做?

理解模組化開發模式:瀏覽器端requirejs,seajs;伺服器端nodejs;ES6模組化;fis、webpack等前端整體模組化解決方案;grunt、gulp等前端工作流的使用

70、AMD(Modules/Asynchronous-Definition)、CMD(Common Module Definition)規範區別?

理解這兩種規範的差異,主要通過requirejs與seajs的對比,理解模組的定義與引用方式

的差異以及這兩種規範的設計原則

1、對於依賴的模組,AMD 是提前執行,CMD 是延遲執行。不過 RequireJS 從 2.0 開始,也改成可以延遲執行(根據寫法不同,處理方式不同)。CMD 推崇 as lazy as possible.

2、CMD 推崇依賴就近,AMD 推崇依賴前置。

3. AMD 的 API 預設是一個當多個用,CMD 的 API 嚴格區分,推崇職責單一。比如 AMD 裡,require 分全域性 require 和區域性 require,都叫 require。CMD 裡,沒有全域性 require,而是根據模組系統的完備性,提供 seajs.use 來實現模組系統的載入啟動。CMD 裡,每個 API 都簡單純粹。

71、requireJS的核心原理是什麼?(如何動態載入的?如何避免多次載入的?如何 快取的?)

核心是js的載入模組,通過正則匹配模組以及模組的依賴關係,保證檔案載入的先後順序,根據檔案的路徑對載入過的檔案做了快取

72、javascript物件的幾種建立方式?

1. 工廠模式

2. 建構函式模式

3. 原型模式

4. 混合建構函式和原型模式

5. 動態原型模式

6. 寄生建構函式模式

7. 穩妥建構函式模式

74、javascript繼承的 6 種方法?

1. 原型鏈繼承

2. 借用建構函式繼承

3. 組合繼承(原型+借用構造)

4. 原型式繼承

5. 寄生式繼承

6. 寄生組合式繼承

75、JavaScript 原型,原型鏈 ? 有什麼特點?

1. 原型物件也是普通的物件,是物件一個自帶隱式的 __proto__ 屬性,原型也有可能有自己的原型,如果一個原型物件的原型不為 null 的話,我們就稱之為原型鏈

2. 原型鏈是由一些用來繼承和共享屬性的物件組成的(有限的)物件鏈

76、簡述一下你對web效能優化的方案?

1、儘量減少 HTTP 請求

2、使用瀏覽器快取

3、使用壓縮元件

4、圖片、JS的預載入

5、將指令碼放在底部

6、將樣式檔案放在頁面頂部

7、使用外部的JS和CSS

8、精簡程式碼

77、模組化怎麼做?

1.使用字面量實現名稱空間(YUI):

Itcast.common.dom={};

Itcast.common.css={};

Itcast.common.event={};

2、使用閉包

立即執行函式,不暴露私有成員

var module1 = (function(){

    var _count = 0;

    var m1 = function(){

      //...

    };

    var m2 = function(){

      //...

    };

    return {

      m1 : m1,

      m2 : m2

    };

  })(); 

相關推薦

js試題---

https://buluo.qq.com/p/detail.html?bid=325612&pid=3458876-1467378136 46、HTTP協議中,GET和POST有什麼區別?分別適用什麼場景 ? get傳送的資料長度有限制,post沒有 get通過

115個Java試題和答案——

第一篇討論了面向物件程式設計和它的特點,關於Java和它的功能的常見問題,Java的集合類,垃圾收集器,本章主要討論異常處理,Java小應用程式,Swing,JDBC,遠端方法呼叫(RMI),Servlet和JSP。異常處理 Swing JDBC JSP 異常處理 43.Java中的兩種異

2017年最新企業試題之shell

2017年最新企業面試題之shell2017年最新企業面試題之shell(一)**********************************************企業Shell面試題1:批量生成隨機字符文件名案例 ********************************************

2017年最新企業試題之shell

2017年最新企業面試題之shell(三)2017年最新企業面試題之shell(三)練習題1:寫一個shell腳本,類似於日誌切割,系統有個logrotate程序,可以完成歸檔。但現在我們要自己寫一個shell腳本實現歸檔。舉例: 假如服務的輸出日誌是1.log,我要求每天歸檔一個,1.log第二天就變成1.

轉:.NET試題匯總

轉換 writing 手動 開放 sqlserve XML stat 導入 asp.net 原文地址:http://www.cnblogs.com/yuan-jun/p/6600692.html 1、簡述 private、 protected、 public、 intern

[ 轉載 ] Java線程試題 Top 50 轉載

top cnblogs pan style java log java線程 轉載 -s http://www.cnblogs.com/dolphin0520/p/3958019.html[ 轉載 ] Java線程面試題 Top 50 (轉載)

2018年Android試題含答案

密碼學 進程的地址空間 變量 細節 一段時間 設備驅動 橋梁 異常 graph 這些面試題是我在今年年初換工作的時候整理,沒有重點。包括java基礎,數據結構,網絡,Android相關等等。適合中高級工程師。由於內容過多,將會分為上下兩部分。希望能夠幫到一些朋友,如果幫助到

PHP 試題 PHP部分

list get 一個 目標 span 快速 是把 true sta 1、雙引號和單引號的區別? 雙引號解釋變量,單引號不解釋變量; 雙引號裏插入單引號,其中單引號裏如果有變量的話,變量解釋; 雙引號解釋轉義字符,單引號不解釋轉義字符,但是解釋‘\和\\;

java試題——java高階

四、Java高階部分 1.紅黑樹的實現原理和應用場景; 1.(1)每個節點或者是黑色,或者是紅色。 (2)根節點是黑色。 (3)每個葉子節點(NIL)是黑色。 [注意:這裡葉子節點,是指為空(NIL或NULL)的葉子節點!] (4)如果一個節點是紅色的,則它的子節點必須是黑色的。 (5)從一

華為的JAVA試題及答案部分

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

如何對第一個Vue.js元件進行單元測試

我們的首次測試 讓我們來寫首個測試。我們首先需要使用shallowMount手動掛載我們的元件,並將其儲存在我們將執行斷言的變數中。我們還可以通過propsData屬性傳遞道具作為物件。 已安裝的元件是一個物件,它有一些實用方法: 然後,我們可以寫第一個斷言: 讓我們來

C語言試題---指標篇

版本宣告:本文轉載於公眾號TeachPlus C語言面試題---指標篇(三) 了解了記憶體空間,接下來我們就一起看一下指標自身用法的一些題目,先來看這樣一道題目: 分析下面程式碼:` # include <stdio.h> # include

C語言試題---指標篇

版本宣告:本文轉載於公眾號TeachPlus 指標的使用,一直是c語言面試題中必考的部分, 因為指標本身使用的複雜性與普適性,所以考點非常多,而且也可以與其他知識相互結合, 因此我們將會使用五篇專題的篇幅來介紹指標。分析下面的程式,指出程式中的錯誤:

java試題——java基礎

table 生命 運行 漸變 於平 單獨使用 標記語言 prepare 新建 java基礎1.java跨平臺  由於各個操作系統的指令不完全一樣,在不同的操作系統執行不同的程序代碼,java開發了java虛擬機來屏蔽系統之間的差異,針對不同的系統安裝不同的虛擬機即可。2.i

面試第一家公司的試題及答案

1.談談對跨域的理解,怎麼處理跨域? 簡單的理解:瀏覽器或者JavaScript說處於安全方面的考慮,對同源策略的限制。 處理的方法一:porxy代理 通過同域名的web伺服器建立一個代理,比如說杭州的伺服器後臺(www.hangzhou.com/porxy-hangzho

【ForOffer】試題基礎總結3

介面是不能例項化的,但是可以例項化介面的類的物件。比如 Map m = new hashMap()。 什麼是執行緒?與程序有什麼區別?為什麼要使用多執行緒? 執行緒是一個程度執行過程中,能夠執行程式程式碼的一個執行單元。有四種狀態:執行,掛起,就緒,結

javascript試題

1、javascript的typeof返回哪些資料型別 object number function boolean underfind string typeof isNaN 檢測陣列的幾種方式: Array.isArray(); es5 toString.call([])

C語言試題---指標篇

# include <stdio.h># include <stdlib.h># include <string.h>void getMemory( char **p , int num){ *p = malloc(num);} int main() {

史上最全python試題詳解 附帶詳細答案關注、持續更新

23、re的match和search區別? re.match()從開頭開始匹配string。 re.search()從anywhere 來匹配string。 # 多行模式>>> re.match('X', 'A\nB\nX', re.MULTILINE) # No ma

史上最全python試題詳解附帶詳細答案關注、持續更新

38、面向物件深度優先和廣度優先是什麼?     39、面向物件中super的作用? 40、是否使用過functools中的函式?其作用是什麼? 1 Python自帶的 functools 模組提供了一些常用的高階函式,也就是用於處理其它函式的特殊函式。