1. 程式人生 > >50道JS面試題

50道JS面試題

1. javascripttypeof返回哪些資料類.

答案:string,boolean,number,undefined,function,object

2. 例舉3種強制型別轉換和2種隱式型別轉換?

答案:強制(parseInt,parseFloat,number隱式(==  ===

3. split() join() 的區

答案:前者是將字串切割成陣列的形式,後者是將陣列轉換成字元

4. 陣列方法pop() push() unshift() shift()
答案:push()尾部新增 pop()尾部刪除unshift()頭部新增 shift()頭部刪

5. IE和標準下有哪些相容性的寫法

答案:

var ev = ev || window.event

document.documentElement.clientWidth || document.body.clientWidthVar target = ev.srcElement||ev.target

6. ajax請求的時候get post方式的區

答案:

一個在url後面 一個放在虛擬載體裡面get有大小限制(只能提交少量引數)安全問題應用不同 ,請求資料和提交資料

7. callapply的區

答案:

Object.call(this,obj1,obj2,obj3)Object.apply(this,arguments)

8. ajax請求時,如何

解析json

答案:使用JSON.parse

9. 事件委託是什

答案利用事件冒泡的原理,讓自己的所觸發的事件,讓他的父元素代替執行

10. 閉包是什麼,有什麼特性,對頁面有什麼影

答案:閉包就是能夠讀取其他函式內部變數的函式,使得函式不被GC回收,如果過多使用閉包,容易導致記憶體洩露

11. 如何阻止事件冒泡

答案:ie:阻止冒泡ev.cancelBubble = true;IE ev.stopPropagation();

12. 如何阻止預設事

答案(1)return false(2) ev.preventDefault();

13. 新增 刪除 替換 插入到某個接點的方

答案:

1)建立新節點
createElement()   //建立一個具體的元素
createTextNode()   //建立一個文字節點

2)新增、移除、替換、插入
appendChild()      //新增
removeChild()      //移除
replaceChild()      //替換
insertBefore()      //插入
 
3)查詢
getElementsByTagName()    //通過標籤名稱
getElementsByName()     //通過元素的Name屬性的值
getElementById()        //通過元素Id,唯一性

14. 解釋jsonp的原理,以及為什麼不是真正的ajax

答案:動態建立script標籤,回撥函式Ajax是頁面無重新整理請求資料操

15. document load document ready的區

答案:document.onload 是在結構和樣式,外部js以及圖片載入完才執行jsdocument.readydom樹建立完成就執行的方法,原生種沒有這個方法,jquery中有 $().ready(function)

16. ”==”“===”的不

答案:前者會自動轉換型別,再判斷是否相等後者不會自動型別轉換,直接去比較

17. 函式宣告與函式表示式的區別

Javscript中,解析器在向執行環境中載入資料時,對函式宣告和函式表示式並非是一視同仁的,解析器會率先讀取函式宣告,並使其在執行任何程式碼之前可用(可以訪問),至於函式表示式,則必須等到解析器執行到它所在的程式碼行,才會真正被解析執行。

18. 對作用域上下文和this的理解,看下列程式碼:

var User = {
 count: 1,
 getCount: function() {
  return this.count;
 }
};
console.log(User.getCount()); // what?
var func = User.getCount;
console.log(func()); // what?
問兩處console輸出什麼?為什麼?
答案:是1和undefined。
  func是在window的上下文中被執行的,所以不會訪問到count屬性。

19. 看下面程式碼,給出輸出結果

for(var i = 1; i <= 3; i++){  //建議使用let 可正常輸出i的值
  setTimeout(function(){
      console.log(i);   
  },0); 
};
答案:4 4 4。
原因:Javascript事件處理器線上程空閒之前不會執行。

20. 當一個DOM節點被點選時候,我們希望能夠執行一個函式,應該怎麼做?

box.onlick= function(){}

box.addEventListener("click",function(){},false);

<button onclick="xxx()"></button>

21. Javascript的事件流模型都有什麼?

“事件冒泡”:事件開始由最具體的元素接受,然後逐級向上傳播

“事件捕捉”:事件由最不具體的節點先接收,然後逐級向下,一直到最具體的

DOM事件流”:三個階段:事件捕捉,目標階段,事件冒泡

22. 看下列程式碼,輸出什麼?解釋原因。

var a = null;
alert(typeof a);
答案:object
解釋:null是一個只有一個值的資料型別,這個值就是null。表示一個空指標物件,所以用typeof檢測會返回”object”。

23. 判斷字串以字母開頭,後面可以是數字,下劃線,字母,長度為6-30

var reg=/^[a-zA-Z]\w{5,29}$/;

24. 回答以下程式碼,alert的值分別是多少?

<script>
     var a = 100;  
     function test(){  
    	alert(a);  
   	 a = 10;  //去掉了var 就變成定義了全域性變量了
    	alert(a);  
}  
test();
alert(a);
</script>
正確答案是: 100, 10, 10

25. javaScript2種變數範圍有什麼不同

全域性變數:當前頁面內有效

區域性變數:函式方法內有效

26. nullundefined的區別?

null是一個表示""的物件,轉為數值時為0undefined是一個表示""的原始值,轉為數值時為NaN

當宣告的變數還未被初始化時,變數的預設值為undefinednull用來表示尚未存在的物件

undefined表示"缺少值",就是此處應該有一個值,但是還沒有定義。典型用法是:

1)變數被聲明瞭,但沒有賦值時,就等於undefined

2)呼叫函式時,應該提供的引數沒有提供,該引數等於undefined

3)物件沒有賦值的屬性,該屬性的值為undefined

4)函式沒有返回值時,預設返回undefined

null表示"沒有物件",即該處不應該有值。典型用法是:

1作為函式的引數,表示該函式的引數不是物件。

2作為物件原型鏈的終點。

27. new操作符具體幹了什麼呢?

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

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

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

28. js延遲載入的方式有哪些?

deferasync、動態建立DOM方式(建立script,插入到DOM中,載入完畢後callBack)、按需非同步載入js

29. FlashAjax各自的優缺點,在使用中如何取捨?

Flash ajax對比

(1)Flash適合處理多媒體、向量圖形、訪問機器;對CSS、處理文字上不足,不容易被搜尋。

(2)ajaxCSS、文字支援很好,支援搜尋;多媒體、向量圖形、機器訪問不足。

    共同點:與伺服器的無重新整理傳遞訊息、使用者離線和線上狀態、操作DOM

30. 寫一個獲取非行間樣式的函式

function getStyle(obj,attr) {

if(obj.currentStyle) {

return obj.currentStyle[attr];

}else{

getComputedStyle(obi,false)[attr]

}

}

31. 希望獲取到頁面中所有的checkbox怎麼做?(不使用第三方框架)

var inputs = document.getElementsByTagName("input");//獲取所有的input標籤物件
var checkboxArray = [];//初始化空陣列,用來存放checkbox物件。
for(var i=0;i<inputs.length;i++){
  var obj = inputs[i];
  if(obj.type=='checkbox'){
     checkboxArray.push(obj);
  }
}

32. 寫一個function,清除字串前後的空格。(相容所有瀏覽器)

String.prototype.trim= function(){

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

}

33. javascript語言特性中,有很多方面和我們接觸的其他程式語言不太一樣,請舉例

javascript語言實現繼承機制的核心就是  1  (原型),而不是Java語言那樣的類式繼承。Javascript解析引擎在讀取一個Object的屬性的值時,會沿著2(原型鏈)向上尋找,如果最終沒有找到,則該屬性值為  3undefined;如果最終找到該屬性的值,則返回結果。與這個過程不同的是,當javascript解析引擎執行給一個Object的某個屬性賦值的時候,如果當前Object存在該屬性,則改寫該屬性的值,如果當前的Object本身並不存在該屬性,則賦值該屬性的值。

34. Cookie在客戶機上是如何儲存的

Cookies就是伺服器暫存放在你的電腦裡的文字檔案,好讓伺服器用來辨認你的計算機。當你在瀏覽網站的時候,Web伺服器會先送一小小資料放在你的計算機上,Cookies 會幫你在網站上所打的文字或是一些選擇都記錄下來。當下次你再訪問同一個網站,Web伺服器會先看看有沒有它上次留下的Cookies資料,有的話,就會依據Cookie裡的內容來判斷使用者,送出特定的網頁內容給你。

35. 如何獲取javascript三個數中的最大值和最小值?

Math.max(a,b,c);//最大值

Math.min(a,b,c)//最小值

36. javascript是面向物件的,怎麼體現javascript的繼承關係?
使用prototype原型來實現。

37. .form中的input可以設定為readonly和disable,請問2者有什麼區別?
readonly不可編輯,但可以選擇和複製;值可以傳遞到後臺disabled不能編輯,不能複製,不能選擇;值不可以傳遞到後臺

38. 列舉javaScript的3種主要資料型別,2種複合資料型別和2種特殊資料型別。

主要資料型別:string, boolean, number

複合資料型別:function, object

特殊型別:undefinednull

39. 程式中捕獲異常的方法?

try{

}catch(e){

}finally{

}

(1)建立物件

var xhr = new XMLHttpRequest();

(2)開啟請求

xhr.open('GET', 'example.txt', true);

(3)傳送請求

xhr.send(); 傳送請求到伺服器

(4)接收響應

xhr.onreadystatechange =function(){}

(1)readystate值從一個值變為另一個值時,都會觸發readystatechange事件。

(2)readystate==4時,表示已經接收到全部響應資料。

(3)status ==200時,表示伺服器成功返回頁面和資料。

(4)如果(2)(3)內容同時滿足,則可以通過xhr.responseText,獲得伺服器返回的內容。

41. 解釋什麼是Json:

(1)JSON 是一種輕量級的資料交換格式。

(2)JSON 獨立於語言和平臺,JSON 解析器和 JSON 庫支援許多不同的程式語言。

(3)JSON的語法表示三種類型值,簡單值(字串,數值,布林值,null),陣列,物件

42. js中的3種彈出式訊息提醒(警告視窗,確認視窗,資訊輸入視窗)的命令式什麼?
alertconfirmprompt

43. 以下程式碼執行結果

var uname = 'jack'
function change() {
    alert(uname) // ?
    var uname = 'lily'
    alert(uname)  //?
}
change()
分別alert出 undefined,lily,(變數宣告提前問題)

44. 瀏覽器的滾動距離:

可視區域距離頁面頂部的距離

scrollTop=document.documentElement.scrollTop||document.body.scrollTop

45. 可視區的大小:

(1)innerXXX(不相容ie

window.innerHeight 可視區高度,包含滾動條寬度

window.innerWidth  可視區寬度,包含滾動條寬度

(2)document.documentElement.clientXXX(相容ie)

document.documentElement.clientWidth可視區寬度,不包含滾動條寬度

document.documentElement.clientHeight可視區高度,不包含滾動條寬度

46. 節點的種類有幾種,分別是什麼?

(1)元素節點:nodeType ===1;

(2)文字節點:nodeType ===3;

(3)屬性節點:nodeType ===2;

47. innerHTMLouterHTML的區別

innerHTML(元素內包含的內容)

outerHTML(自己以及元素內的內容)

48. offsetWidth offsetHeightclientWidth clientHeight的區別

(1)offsetWidth content寬度+padding寬度+border寬度)

(2)offsetHeightcontent高度+padding高度+border高度)

(3)clientWidthcontent寬度+padding寬度)

(4)clientHeightcontent高度+padding高度)

49. 閉包的好處

(1)希望一個變數長期駐紮在記憶體當中(不被垃圾回收機制回收)

(2)避免全域性變數的汙染

(3)私有成員的存在

(4)安全性提高

50. 氣泡排序演算法

氣泡排序

var array = [5, 4, 3, 2, 1];
var temp = 0;
for (var i = 0; i <array.length; i++){
for (var j = 0; j <array.length - i; j++){
if (array[j] > array[j + 1]){
temp = array[j + 1];
array[j + 1] = array[j];
array[j] = temp;
 }
}
}