前端面試題四

1、JS數組去重

以下是展示三種方法:

Array.prototype.unique1= function () {

  var n = []; //一個新的臨時數組

  for (var i = 0; i < this.length; i++) //遍歷當前數組

  {

    //如果當前數組的第i已經保存進了臨時數組,那麼跳過,

    //否則把當前項push到臨時數組裏面

    if (n.indexOf(this[i]) == -1)n.push(this[i]);

  }

  return n;

}

 

Array.prototype.unique2= function()

{

    var n = {},r=[]; //n爲hash表,r爲臨時數組

    for(var i = 0; i < this.length; i++) //遍歷當前數組

    {

        if (!n[this[i]]) //如果hash表中沒有當前項

        {

            n[this[i]] = true; //存入hash表

            r.push(this[i]); //把當前數組的當前項push到臨時數組裏面

        }

    }

    return r;

}

 

Array.prototype.unique3= function()

{

    var n = [this[0]]; //結果數組

    for(var i = 1; i < this.length; i++) //從第二項開始遍歷

    {

        //如果當前數組的第i項在當前數組中第一次出現的位置不是i,

        //那麼表示第i項是重複的,忽略掉。否則存入結果數組

        if (this.indexOf(this[i]) == i)n.push(this[i]);

    }

    return n;

}



2.    js操作獲取和設置cookie

//創建cookie

functionsetCookie(name, value, expires, path, domain, secure) {

var cookieText = encodeURIComponent(name) +'=' + encodeURIComponent(value);

  if (expires instanceof Date) {

      cookieText += '; expires=' + expires;

   }

   if (path) {

       cookieText += '; expires=' + expires;

    }

         if (domain) {

               cookieText += '; domain=' + domain;

           }

           if (secure) {

               cookieText += '; secure';

           }

           document.cookie = cookieText;

       }

        

       //獲取cookie

       functiongetCookie(name) {

           var cookieName = encodeURIComponent(name) +'=';

           var cookieStart =document.cookie.indexOf(cookieName);

           var cookieValue = null;

           if (cookieStart > -1) {

               var cookieEnd =document.cookie.indexOf(';', cookieStart);

               if (cookieEnd == -1) {

                   cookieEnd = document.cookie.length;

               }

               cookieValue =decodeURIComponent(document.cookie.substring(cookieStart + cookieName.length,cookieEnd));

           }

           return cookieValue;

       }

        

       //刪除cookie

       functionunsetCookie(name) {

           document.cookie = name + "= ;expires=" + new Date(0);

  }


3.ajax 有那些優缺點?如何解決跨域問題?
(Q1)
優點:
(1)通過異步模式,提升了用戶體驗.
(2)優化了瀏覽器和服務器之間的傳輸,減少不必要的數據往返,減少了帶寬佔用.
(3)Ajax在客戶端運行,承擔了一部分本來由服務器承擔的工作,減少了大用戶量下的服務器負載。
(4)Ajax可以實現動態不刷新(局部刷新)
缺點:
(1)安全問題 AJAX暴露了與服務器交互的細節。
(2)對搜索引擎的支持比較弱。
(3)不容易調試。
(Q2)jsonp、 iframe、window.name、window.postMessage、服務器上設置代理頁面。
4.JavaScript原型,原型鏈 ? 有什麼特點?
(1)原型對象也是普通的對象,是對象一個自帶隱式的 __proto__ 屬性,原型也有可能有自己的原型,如果一個原型對象的原型不爲null的話,我們就稱之爲原型鏈。
(2)原型鏈是由一些用來繼承和共享屬性的對象組成的(有限的)對象鏈。
5.GET和POST的區別,何時使用POST?
GET:一般用於信息獲取,使用URL傳遞參數,對所發送信息的數量也有限制,一般在2000個字符
POST:一般用於修改服務器上的資源,對所發送的信息沒有限制。
GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值,
也就是說Get是通過地址欄來傳值,而Post是通過提交表單來傳值。
然而,在以下情況中,請使用 POST 請求:
無法使用緩存文件(更新服務器上的文件或數據庫
向服務器發送大量數據(POST 沒有數據量限制)
發送包含未知字符的用戶輸入時,POST 比 GET 更穩定也更可靠
6.請解釋一下 JavaScript 的同源策略
概念:同源策略是客戶端腳本(尤其是Javascript)的重要的安全度量標準。它最早出自Netscape Navigator2.0,其目的是防止某個文檔或腳本從多個不同源裝載。
這裏的同源策略指的是:協議,域名,端口相同,同源策略是一種安全協議。
指一段腳本只能讀取來自同一來源的窗口和文檔的屬性。
爲什麼要有同源限制?
我們舉例說明:比如一個黑客程序,他利用Iframe把真正的銀行登錄頁面嵌到他的頁面上,當你使用真實的用戶名,密碼登錄時,他的頁面就可以通過Javascript讀取到你的表單中input中的內容,這樣用戶名,密碼就輕鬆到手了。
7.Flash、Ajax各自的優缺點,在使用中如何取捨?
Flash適合處理多媒體、矢量圖形、訪問機器;對CSS、處理文本上不足,不容易被搜索。
Ajax對CSS、文本支持很好,支持搜索;多媒體、矢量圖形、機器訪問不足。
共同點:與服務器的無刷新傳遞消息、用戶離線和在線狀態、操作DOM
8.什麼是閉包?
閉包,官方對閉包的解釋是:一個擁有許多變量和綁定了這些變量的環境的表達式(通常是一個函數),因而這些變量也是該表達式的一部分。閉包的特點:
(1)作爲一個函數變量的一個引用,當函數返回時,其處於激活狀態。
(2)一個閉包就是當一個函數返回時,一個沒有釋放資源的棧區。
簡單的說,Javascript允許使用內部函數---即函數定義和函數表達式位於另一個函數的函數體內。而且,這些內部函數可以訪問它們所在的外部函數中聲明的所有局部變量、參數和聲明的其他內部函數。當其中一個這樣的內部函數在包含它們的外部函數之外被調用時,就會形成閉包。
9.javascript裏面的繼承怎麼實現,如何避免原型鏈上面的對象共享
用構造函數和原型鏈的混合模式去實現繼承,避免對象共享可以參考經典的extend()函數,很多前端框架都有封裝的,就是用一個空函數當做中間變量
10.ajax過程
(1)創建XMLHttpRequest對象,也就是創建一個異步調用對象.
(2)創建一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證信息.
(3)設置響應HTTP請求狀態變化的函數.
(4)發送HTTP請求.
(5)獲取異步調用返回的數據.
(6)使用JavaScript和DOM實現局部刷新.

11.一個頁面從輸入 URL 到頁面加載顯示完成,這個過程中都發生了什麼?
(1)查找瀏覽器緩存
(2)DNS解析、查找該域名對應的IP地址、重定向(301)、發出第二個GET請求
(3)進行HTTP協議會話
(4)客戶端發送報頭(請求報頭)
(5)服務器回饋報頭(響應報頭)
(6)html文檔開始下載
(7)文檔樹建立,根據標記請求所需指定MIME類型的文件
(8)文件顯示
12.爲什麼換工作?
13.你常用的開發工具是什麼,爲什麼?
14.對前端界面工程師這個職位是怎麼樣理解的?它的前景會怎麼樣?
15.加班的看法?

加班就像借錢,原則應當是------救急不救窮

發佈了30 篇原創文章 · 獲贊 31 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章