分享JavaScript面試題部分

好程式設計師發表於2020-07-15

  今天好程式設計師web 前端培訓小編要跟大家分享的是關於 JavaScript 面試題部分內容。準備參加 web 前端面試的小夥伴們一起看一看吧,希望能夠對大家有所幫助!

  1 、怎樣新增、移除、移動、複製、建立和查詢節點 ?

  1) 建立新節點

  createDocumentFragment() // 建立一個 DOM 片段

  createElement() // 建立一個具體的元素

  createTextNode() // 建立一個文字節點

  2) 新增、移除、替換、插入

  appendChild() // 新增

  removeChild() // 移除

  replaceChild() // 替換

  insertBefore() // 插入

  3) 查詢

  getElementsByTagName() // 透過標籤名稱

  getElementsByName() // 透過元素的 Name 屬性的值

  getElementById() // 透過元素 Id ,唯一性

  2 、實現一個函式 clone ,可以對 JavaScript 中的 5 種主要的資料型別 ( 包括 Number String Object Array Boolean) 進行值複製。

  /**

  物件克隆

  支援基本資料型別及物件

  遞迴方法

  */

  functionclone(obj){

  varo;

  switch(typeof obj){

  case"undefined":

  break;

  case"string":

  o = obj + "";

  break;

  case"number":

  o = obj - 0;

  break;

  case"boolean":

  o = obj;

  break;

  case"object": // object  分為兩種情況 物件 (Object) 或陣列 (Array)

  if(obj === null){

  o = null;

  }else{

  if(Object.prototype.toString.call(obj).slice(8, -1) === "Array"){

  o = [];

  for(vari = 0;i obj.length;i++){

  o.push(clone(obj[i]));

  }

  }else{

  o = {};

  for(varkinobj){

  o[k] = clone(obj[k]);

  }

  }

  }

  break;

  default:

  o = obj;

  break;

  }

  returno;

  }

  3 、如何消除一個陣列裡面重復的元素 ?

  //  方法一:

  vararr1 =[1,2,2,2,3,3,3,4,5,6],

  arr2 = [];

  for(vari = 0,len = arr1.length;i< len;i++){

  if(arr2.indexOf(arr1[i]) < 0){

  arr2.push(arr1[i]);

  }

  }

  document.write(arr2);// 1,2,3,4,5,6

  4 、想實現一個對頁面某個節點的拖曳 ? 如何做 ?( 使用原生 JS)

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

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

  functionlog(){

  varargs = Array.prototype.slice.call(arguments);

  // 為了使用 unshift 陣列方法,將 argument 轉化為真正的陣列

  args.unshift('(app)');

  console.log.apply(console,args);

  };

  6 Javascript callee caller 的作用 ?

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

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

  7 、請描述一下 cookies sessionStorage localStorage 的區別

  sessionStorage 用於本地儲存一個會話 (session) 中的資料,這些資料只有在同一個會話中的頁面才能訪問並且當會話結束後資料也隨之銷燬。因此 sessionStorage 不是一種持久化的本地儲存,僅僅是會話級別的儲存。而 localStorage 用於持久化的本地儲存,除非主動刪除資料,否則資料是永遠不會過期的。

  web storage cookie 的區別

  web Storage 的概念和 cookie 相似,區別是它是為了更大容量儲存設計的。 Cookie 的大小是受限的,並且每次你請求一個新的頁面的時候 Cookie 都會被髮送過去,這樣無形中浪費了頻寬,另外 cookie 還需要指定作用域,不可以跨域呼叫。

  除此之外,web Storage 擁有 setItem,getItem,removeItem,clear 等方法,不像 cookie 需要前端開發者自己封裝 setCookie getCookie 。但是 Cookie 也是不可以或缺的: Cookie 的作用是與伺服器進行互動,作為 HTTP 規範的一部分而存在 ,而 web Storage 僅僅是為了在本地“儲存”資料而生。

  8 、手寫陣列快速排序

  關於快排演算法的詳細說明,可以參考阮一峰老師的文章快速排序

  “快速排序”的思想很簡單,整個排序過程只需要三步:

  (1) 在資料集之中,選擇一個元素作為”基準” (pivot)

  (2) 所有小於”基準”的元素,都移到”基準”的左邊 ; 所有大於”基準”的元素,都移到”基準”的右邊。

  (3) 對”基準”左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下一個元素為止。

  9 、統計字串” aaaabbbccccddfgh ”中字母個數或統計最多字母數。

  varstr = "aaaabbbccccddfgh";

  varobj = {};

  for(vari=0;istr.length;i++){

  varv = str.charAt(i);

  if(obj[v] & obj[v].value == v){

  obj[v].count = ++ obj[v].count;

  }else{

  obj[v] = {};

  obj[v].count = 1;

  obj[v].value = v;

  }

  }

  for(key inobj){

  document.write(obj[key].value +'='+obj[key].count+' ');// a=4 b=3 c=4 d=2 f=1 g=1 h=1

  }

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

  functiontrim(str){

  if(str & typeof str === "string"){

  returnstr.replace(/(^s*)|(s*)$/g,"");// 去除前後空白符

  }

  }

  以上就是小編今天為大家分享的關於web 前端面試題之 JavaScript 部分的文章


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2704623/,如需轉載,請註明出處,否則將追究法律責任。

相關文章