WEB前端面試題基礎


「 CSS篇 」

1. CSS 盒子模型,絕對定位和相對定位

2. 清除浮動,什么時候需要清除浮動,清除浮動都有哪些方法

3. 如何保持浮層水平垂直居中

    答:absolute + 負margin  

           absolute + transform

           flex

           grid

4. position 和 display 的取值和各自的意思和用法

    答:position屬性取值:static(默認)、relative、absolute、fixed、inherit

           display屬性取值:none、inline、inline-block、block、flex、inherit

5. 樣式的層級關系,選擇器優先級,樣式沖突,以及抽離樣式模塊怎么寫,說出思路,有無實踐經驗

6. css3動畫效果屬性,canvas、svg的區別,CSS3中新增偽類舉例

7. px和em和rem的區別,CSS中link 和@import的區別是?

5. 了解過flex嗎?

    答:flex-direction

           flex-wrap

           justify-content

           align-items

           align-content

 

「 JavaScript 篇 」

JavaScript 基礎

1. JavaScript 里有哪些數據類型,解釋清楚 null 和 undefined,解釋清楚原始數據類型和引用數據類型。比如講一下 1 和 Number(1)的區別

2. 將一下 prototype 是什么東西,原型鏈的理解,什么時候用 prototype

    答:js中,prototype是函數的原型。每個函數都是一個對象,並且擁有一個屬性prototype,該屬性也是一個對象,是屬性和方法的集合。

      原型鏈:實例對象的原型__proto__指向new出該實例對象的構造函數原型prototype,再指向原始的對象原型Object.prototype,再指向null,形成原型鏈。

      使用prototype的好處是不會產生額外的內存,所有實例化后的對象都會從原型上繼承這個屬性或方法。當一個子類需要擁有父類的某些屬性或方法,

           該屬性或方法可以覆 蓋,又可以添加自己的屬性和方法,這個操作不影響父類,這個時候使用prototype。

      fn.__proto__===Fn.prototype
      Fn.prototype.constructor===Fn

3. 函數里的this什么含義,什么情況下,怎么用。

    答:通常在構造函數中使用,就是通過這個函數生成一個新對象(object)。這時,this就指這個新對象。

      function test(){
        this.x = 1;
      }
      var o = new test();
      alert(o.x); // 1
           運行結果為1。為了表明這時this不是全局對象,對代碼做一些改變:
      var x = 2;
      function test(){
        this.x = 1;
      }
      var o = new test();
      alert(x); //2
           運行結果為2,表明全局變量x的值沒變。

4. apply和 call 什么含義,什么區別?什么時候用。

    答:function add(c,d){

               console.log(this.a + this.b + c + d);
            }
            var o ={a:1,b:3};


            add.call(o,5,7);    //1+3+5+7=16
            //傳參的時候是扁平的把每個參數傳進去


            add.apply(o,[10,20]);   //1+3+10+20=34
            //傳參的時候是把參數作為一個數組傳進去


            //什么時候使用call或者apply
            function bar(){
                console.log(Object.prototype.toString.call(this));
                // 用來調用一些無法直接調用的方法
            }
            bar.call(7); //"[object Number]"

5. 數組和對象有哪些原生方法,列舉一下,分別是什么含義,比如連接兩個數組用哪個方法,刪除數組的指定項和重新組裝數組(操作數據的重點)。

    答:數組:

            length設置或返回 數組中元素的數目。
            push() :向數組的末尾添加一個或多個元素,並返回新的長度,也就是添加元素后的數組長度。
            shift():用於把數組的第一個元素從其中刪除,並返回第一個元素的值。
            unshift():向數組的開頭添加一個或更多元素,並返回新的長度。
            pop():用於刪除並返回數組的最后一個元素。
            splice():用於插入、刪除或替換數組的元素。
            concat():方法用於連接兩個或多個數組。
            join():用於把數組中的所有元素放入一個字符串。元素是通過指定的分隔符進行分隔的。
            toString():方法可把數組轉換為字符串,並返回結果。
            reverse():方法用於顛倒數組中元素的順序。
            slice():方法可從已有的數組中返回選定的元素。
            sort():方法用於對數組的元素進行排序(從小到大)。

            indexOf():返回獲取項在數組中的索引
            lastIndexOf():返回獲取項在數組中出現的最后一次索引
            forEach():循環遍歷數組 參數是一個匿名函數 默認返回為undefined
            map():循環遍歷數組 參數是一個匿名函數

            對象:

            charAt(): 返回在指定位置的字符。
            charCodeAt(): 返回在指定的位置的字符的 Unicode 編碼。
            concat():連接字符串。
            indexOf():檢索字符串。
            match(): 找到一個或多個正則表達式的匹配。
            replace():替換與正則表達式匹配的子串。
            search(): 檢索與正則表達式相匹配的值。
            slice(): 提取字符串的片斷,並在新的字符串中返回被提取的部分。
            split(): 把字符串分割為字符串數組。
            toLocaleLowerCase(): 把字符串轉換為小寫。
            toLocaleUpperCase(): 把字符串轉換為大寫。
            toLowerCase(): 把字符串轉換為小寫。
            toUpperCase(): 把字符串轉換為大寫。
            substr(): 從起始索引號提取字符串中指定數目的字符。
            substring(): 提取字符串中兩個指定的索引號之間的字符。

6. 怎樣避免全局變量污染?ES5嚴格模式的作用,ES6箭頭函數和ES5普通函數一樣嗎?

    答:避免污染個人常用模塊化解決

           箭頭函數和普通函數區別在於this的使用

           由於箭頭函數使得this從“動態”變成“靜態”,下面兩個場合不應該使用箭頭函數。

          第一個場合是定義函數的方法,且該方法內部包括this

          第二個場合是需要動態this的時候,也不應使用箭頭函數。

JavaScript 的面向對象

1. JS 模塊包裝格式都用過哪些,CommonJS、AMD、CMD。定義一個JS 模塊代碼,最精簡的格式是怎樣。

2. JS 怎么實現一個類。怎么實例化這個類。

3. 理解閉包嗎?請講一講閉包在實際開發中的作用;閉包建議頻繁使用嗎?

4. 說一下了解的js 設計模式,解釋一下單例、工廠、觀察者。

5. ajax 跨域有哪些方法,jsonp 的原理是什么,如果頁面編碼和被請求的資源編碼不一致如何處理?



作者:前端攻城小牛
鏈接:https://www.jianshu.com/p/eb0f269098d5
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM