前端面試題


1.盒子模型

1)是什么:每個元素被表示為一個矩形的盒子,由四部分組成:內容(content)、內邊距(padding)、邊框(border)、外邊距(margin)。它在頁面中所占的實際大小(寬高)是content+padding+border+margin之和。

2)盒模型有兩種:標准盒模型(W3C盒模型)、IE盒模型。

 

3)兩種盒模型的區別:標准盒模型內容大小就是content大小,而IE盒模型內容大小則是content+padding+border總的大小。

4)怎么設置兩種盒模型:通過設置box-sizing屬性為content-box(默認值,標准盒模型)、border-box(IE盒模型)。

5)box-sizing使用場景:若設置子元素的margin或border時可能會撐破父元素的尺寸,就需要使用box-sizing:border-box來將border包含進元素的尺寸中。

2.外邊距重疊(collapsing margins)/margin坍塌

1)是什么:相鄰的兩個或多個普通流中的塊元素,如果它們設置了外邊距,那么在垂直方向上,外邊距會發生重疊,以絕對值大的那個為最終結果顯示在頁面上,即最終的外邊距等於發生層疊的外邊距中絕對值較大者。

2)最終外邊距:margin全為正(取最大值)、margin全為負(取絕對值最大的負數)、margin有正有負(分別取正數最大值a,負數的最大絕對值b,a-b)

3)外邊距重疊的應用:幾個段落一起布局,第一個段落的上外邊距正常顯示,下外邊距與第二個段落的上外邊距重疊。

4)防止外邊距重疊:創建BFC元素。

5)不會發生外邊距重疊的情況:行內元素、浮動元素、絕對定位元素之間的外邊距都不會疊加。

3.BFC(Block Formatting Context,塊級格式化上下文)

1)是什么:決定了元素如何對其內容進行定位,以及與其他元素的關系和相互作用。簡言之,就是一個特殊的塊,內部的元素和外部的元素不會相互影響。BFC內的盒子會在垂直方向上一個接一個地放置,垂直方向上也會發生外邊距重疊。

2)應用場景:自適應布局(BFC不與float box重疊)、清除浮動(計算BFC的高度時,內部的浮動元素也被計算在內)、防止外邊距重疊。

3)如何觸發BFC:float屬性(不為none)、overflow屬性(不為visible)、position屬性(absolute,fixed)、display屬性(inline-block,table-cell,table-caption,flex,inline-flex)。

4.行內元素有哪些?塊級元素有哪些?空元素(void)有哪些?

1)行內元素:a,b,span,img,input,strong,label,button,select,textarea,em

2)塊級元素:div,ul(無序列表),ol,li,dl(自定義列表),dt(自定義列表項),dd(自定義列表項的定義),p,h1-h6,blockquote(塊引用)

3)空元素(void):即沒有內容的HTML元素。br(換行),hr(水平分割線),meta,link,input,img

5.doctype 的作用?嚴格模式與混雜模式如何區分?它們有何意義?

1)是什么:DOCTYPE是document type (文檔類型) 的縮寫。 < !DOCTYPE > 聲明位於文檔的最前面,處於標簽之前,它不是html標簽。主要作用是告訴瀏覽器的解析器使用哪種HTML規范或者XHTML規范來解析頁面。

2)應用場景:嚴格模式和混雜模式都是瀏覽器的呈現模式,瀏覽器究竟使用混雜模式還是嚴格模式呈現頁面與網頁中的DTD(文件類型定義)有關,DTD里面包含了文檔的規則。比如:loose.dtd

3)嚴格模式:又稱標准模式,是指瀏覽器按照W3C標准來解析代碼,呈現頁面。

      混雜模式:又稱為怪異模式或者兼容模式,是指瀏覽器按照自己的方式來解析代碼,使用一種比較寬松的向后兼容的方式來顯示頁面。

6.HTML5 為什么只需寫< !DOCTYPE HTML> ?

  HTML5不基於 SGML (標准通用標記語言),因此不需要對DTD( DTD 規定了標記語言的規則,這樣瀏覽器才能正確地呈現內容。)進行引用,但是需要doctype來規范瀏覽器的行為(讓瀏覽器按照它們應該的方式來運行)。而HTML4.01基於SGML,所以需要對DTD進行引用,才能告知瀏覽器文檔所使用的文檔類型。

7.頁面導入樣式時,使用link和@import有什么區別?

1)  link屬於XHTML標簽,import是CSS提供的方式。link方式除了CSS,還可以定義RSS,定義rel連接屬性等,而import只能加載CSS。

2)  link是頁面加載時同時執行的,而import是在頁面加載完之后,才會執行的。

3)  link支持使用Javascript控制DOM去改變樣式;而@import不支持。

4)  link是XHTML標簽,無兼容問題;@import是在CSS2.1提出的,低版本(IE5及以下)的瀏覽器不支持。

8.介紹一下你對瀏覽器內核的理解?

主要分成兩部分:渲染引擎(layout engineer或 Rendering Engine) 和 JS 引擎。

渲染引擎:用於獲取html、css和圖片,然后會輸出至顯示器或打印機。瀏覽器的內核的不同對於網頁的語法解釋會有不同,所以渲染的效果也不相同。

JS引擎:解析和執行 javascript 來實現網頁的動態效果。

9、常見的瀏覽器內核有哪些?

1)Trident:IE、360

2)Gecko:Firefox

3)Webkit:Safari、Chrome內核原型

4)Chromium/Blink:Chrome

5)Blink:opera

10、html5有哪些新特性、移除了那些元素?如何處理HTML5新標簽的瀏覽器兼容問題?

HTML5 現在已經不是SGML 的子集,主要是關於圖像,位置,存儲,多任務等功能的增加。

新特性:

  • 繪畫canvas
  • 用於媒介回放的video 和audio 元素
  • 本地離線存儲localStorage 長期存儲數據,瀏覽器關閉后數據不丟失
  • sessionStorage 的數據在瀏覽器關閉后自動刪除
  • 語意化更好的內容元素,比如:article、footer、header、nav、section
  • 表單控件:calendar、date、time、email、url、search
  • 新的技術:webworker,websockt, Geolocation

移除的元素:

  • 純表現的元素:basefont,big,center,font, s,strike,tt,u;
  • 對可用性產生負面影響的元素:frame,frameset,noframes;

兼容問題:

  • IE6/IE7/IE8 支持通過 document.createElment 方法產生的標簽,利用這一特性讓這些瀏覽器支持 HTML5 新標簽。瀏覽器支持新標簽后,還需要添加標簽默認的樣式。
  • 當然最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

11.HTML5的離線儲存怎么使用,工作原理能不能解釋一下?

1)使用:

              1.頁面頭部像下面一樣加入一個manifest的屬性    html <html manifest = "cache.manifest">

              2.在cache.manifest文件的編寫離線存儲的資源

      ```html
      CACHE MANIFEST
      #v0.11

      CACHE:

      js/app.js
      css/style.css

      NETWORK:
      resourse/logo.png

      FALLBACK:
      / /offline.html
     ```

2)原理:

      HTML5的離線存儲是基於一個新建的.appcache文件的緩存機制(不是存儲技術),通過這個文件上的解析清單離線存儲資源,這些資源就會像cookie一樣被存儲了下來。之后當網絡在處於離線狀態下時,瀏覽器會通過被離線存儲的數據進行頁面展示。

12.瀏覽器是怎么對HTML5的離線儲存資源進行管理和加載的呢?

在線的情況下,瀏覽器發現Html頭部有manifest屬性,它會請求manifest文件。

如果是第一次訪問APP,那么瀏覽器就會根據manifest文件的內容下載相應的資源並且進行離線存儲。

如果已經訪問過APP並且資源已經離線存儲了,那么瀏覽器就會使用離線的資源加載頁面。然后瀏覽器會對比新的manifest文件與舊的manifest文件,如果文件沒有發生改變,就不做任何操作,如果文件改變了,那么就會重新下載文件中的資源並進行離線存儲。

離線的情況下,瀏覽器就直接使用離線存儲的資源。

13.請描述一下 cookies,sessionStorage 和 localStorage 的區別?

1)存儲大小

  cookie數據大小不能超過4k。

  sessionStorage和localStorage 雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。

2)有效時間

  sessionStorage和localStorage:雖然也有存儲大小的限制,但比cookie大得多,可以達到5M或更大。

  sessionStorage:數據在當前瀏覽器窗口關閉后自動刪除。

  cookie:設置的cookie過期時間之前一直有效,即使窗口或瀏覽器關閉。

3)數據與服務器之間的交互方式

  cookie的數據會自動的傳遞到服務器,服務器端也可以寫cookie到客戶端。

  sessionStorage和localStorage不會自動把數據發給服務器,僅在本地保存。

14.iframe有那些缺點?

1) iframe會阻塞主頁面的Onload事件;

2)搜索引擎的檢索程序無法解讀這種頁面,不利於SEO;

3)iframe和主頁面共享連接池,而瀏覽器對相同域的連接有限制,所以會影響頁面的並行加載。

使用iframe之前需要考慮這兩個缺點。如果需要使用iframe,最好是通過javascript。動態給iframe添加src屬性值,這樣可以繞開以上兩個問題。

15.Label的作用是什么?是怎么用的?(加 for 或 包裹)

 1)解釋:label標簽來定義表單控制間的關系,當用戶選擇該標簽時,瀏覽器會自動將焦點轉到和標簽相關的表單控件上。

2)例子:

  <label for="Name">Number:</label>

  <input type=“text“name="Name" id="Name"/>

  或者

  <label>Date:<input type="text" name="B" /></label>

16.HTML5的form如何關閉自動完成功能?

給不想要的提示信息標簽里設置:autocomplete:off

17.如何實現瀏覽器內多個標簽頁之間的通信? (阿里)

方法1:使用localStorage

<!--在一個標簽頁里面使用 localStorage.setItem(key,value)添加(修改、刪除)內容;-->
<input id="name">  
<input type="button" id="btn" value="提交">  
<script type="text/javascript">  
    $(function(){    
        $("#btn").click(function(){    
            var name=$("#name").val();    
            localStorage.setItem("name", name);   
        });    
    });    
</script>

 

<!--在另一個標簽頁里面監聽 storage 事件。
即可得到 localstorge 存儲的值,實現不同標簽頁之間的通信。-->
<script type="text/javascript">  
    $(function(){   
        window.addEventListener("storage", function(event){    
            console.log(event.key + "=" + event.newValue);    
        });     
    });  
</script>

 

 

方法2:調用cookie+setInterval()

將要傳遞的信息存儲在cookie中,每隔一定時間讀取cookie信息,即可隨時獲取要傳遞的信息。

頁面1:

 

將:
localStorage.setItem("name", name); 
改為:
document.cookie="name="+name; 

 

頁面2:

<script type="text/javascript">  
    $(function(){   
        function getCookie(key) {    
            return JSON.parse("{\"" + document.cookie.replace(/;\s+/gim,"\",\"").replace(/=/gim, "\":\"") + "\"}")[key];    
        }     
        setInterval(function(){    
            console.log("name=" + getCookie("name"));    
        }, 10000);    
    });  
</script>  

 18.CSS3有哪些新特性?

1.CSS3的選擇器

  1)E:last-child 匹配父元素的最后一個子元素E。
  2)E:nth-child(n)匹配父元素的第n個子元素E。
  3)E:nth-last-child(n) CSS3 匹配父元素的倒數第n個子元素E。

2. @Font-face 特性

Font-face 可以用來加載字體樣式,而且它還能夠加載服務器端的字體文件,讓客戶端顯示客戶端所沒有安裝的字體。

@font-face { 
 font-family: BorderWeb; 
 src:url(BORDERW0.eot); 
 } 
 @font-face { 
 font-family: Runic; 
 src:url(RUNICMT0.eot); 
 } 
 .border { FONT-SIZE: 35px; COLOR: black; FONT-FAMILY: "BorderWeb" } 
 .event { FONT-SIZE: 110px; COLOR: black; FONT-FAMILY: "Runic" }

 3. 圓角

border-radius: 15px;

4. 多列布局 (multi-column layout)

<div class="mul-col">
    <div>
        <h3>新手上路</h3>
        <p>新手專區 消費警示 交易安全 24小時在線幫助 免費開店</p>
    </div>
    <div>
        <h3>付款方式</h3>
        <p>快捷支付 信用卡 余額寶 螞蟻花唄 貨到付款</p>
    </div>
    <div>
        <h3>淘寶特色</h3>
        <p>手機淘寶 旺信 大眾評審 B格指南</p>
    </div>
</div>
.mul-col{
    column-count: 3;
    column-gap: 5px;
    column-rule: 1px solid gray;
    border-radius: 5px;
    border:1px solid gray;
    padding: 10px   ;
}

 5.陰影(Shadow)

 .class1{ 
      text-shadow:5px 2px 6px rgba(64, 64, 64, 0.5); 
 }

6.CSS3 的漸變效果

background-image:-webkit-gradient(linear,0% 0%,100% 0%,from(#2A8BBE),to(#FE280E));

這里 linear 表示線性漸變,從左到右,由藍色(#2A8BBE)到紅色(#FE280E)的漸變。

19.px,em和rem的區別

在css中單位長度用的最多的是px、em、rem,這三個的區別是:

一、px是固定的像素,一旦設置了就無法因為適應頁面大小而改變。

二、em和rem相對於px更具有靈活性,他們是相對長度單位,意思是長度不是定死了的,更適用於響應式布局。

三、em是相對於其父元素來設置字體大小的,一般都是以<body>的“font-size”為基准。這樣就會存在一個問題,進行任何元素設置,都有可能需要知道他父元素的大小。而Rem是相對於根元素<html>,這樣就意味着,我們只需要在根元素確定一個參考值。

總之:對於em和rem的區別一句話概括:em相對於父元素,rem相對於根元素。

20.事件綁定和普通事件有什么區別

 

普通事件

1、如果說給同一個元素綁定了兩次或者多次相同類型的事件,那么后面的綁定會覆蓋前面 的綁定 ; 
2、不支持 DOM 事件流 事件捕獲階段目標元素階段=>事件冒泡階段

 

var btn=document.getElementByid('ID名') //給相應的DOM節點取一個ID名。
btn.onclick=function(){ alert(1) }; btn.onclick=function(){ alert(2) };

 

 

 

執行上邊代碼只會輸出alert(2);

事件綁定

1.addEventListener不兼容低版本ie

2.普通事件無法取消,

 

3.addEventListener還支持事件冒泡+事件捕獲。

var btn=document.getElementByid("ID名"); btn.addEventListener("click",function(){     alert('Hello'); },false); btn.addEventListener("click",function(){     alert('Hello'); },false);

 

 

執行上邊代碼會先輸出alert(1);在輸出alert(2);

21.document load 和 document ready 的區別

 

Document.onload: 是在結構和樣式加載完就執行 js 。
window.onload:不僅僅要在結構和樣式加載完,還要執行完所有的樣式、圖片這些資源文 件,全部加載完才會觸發 。

22.”==”和“===”的不同

 

==:會自動轉換類型。

===:先判斷左右兩邊的數據類型,如果數據類型不一致,直接返回 false ,之后才會進行兩邊值的判斷。

23.JavaScript的同源策略

概念:同源策略是瀏覽器的一個安全機制,只有同協議,同域名,同端口才會被視為同源。

目的:是為了保證用戶信息的安全,防止惡意的網站竊取數據。

非同源的限制范圍:

 

隨着互聯網的發展,同源政策越來越嚴格。目前,如果非同源,共有三種行為受到限制。

 

1)無法讀取非同源網頁的 Cookie、LocalStorage 和 IndexedDB。

2)無法接觸非同源網頁的 DOM。

3)無法向非同源地址發送 AJAX 請求(可以發送,但瀏覽器會拒絕接受響應)。

跨域通信的方式:

1)JSONP

2)WebSocket

3)CORS

(1)JSONP

    利用script標簽的src將其它域的js文件載入,如果在此處動態創建script標簽的話,就能實現對其它域中數據的動態讀取
不過僅僅是取得了數據,還無法在客戶端使用。因此產生jsonp(json with padding ,padding指向json數據中添加函數名)
服務端會對數據添加函數名后返回。

function addScriptTag(src) {
  var script = document.createElement('script');
  script.setAttribute("type","text/javascript");
  script.src = src;
  document.body.appendChild(script);
}
 
window.onload = function () {
  addScriptTag('http://example.com/ip?callback=foo');
}
 
function foo(data) {
  console.log('Your public IP address is: ' + data.ip);
};
foo({
  "ip": "8.8.8.8"
});

 

(2)WebSocket

WebSocket是一種通信協議,使用ws://(非加密)和wss://(加密)作為協議前綴。該協議不實行同源政策,只要服務器支持,就可以通過它進行跨源通信。

一、WebSocket目標

在一個單獨的持久性socket連接上提供全雙工、雙向通信。

二、基本原理

在瀏覽器客戶端通過javascript進行初始化連接,就可以監聽相關的事件和調用socket方法來對服務器的消息進行讀寫操作。瀏覽器和服務器只需要做一個握手的動作,他們之間就形成了一條快速通道,可以互相傳送數據。不需要多次創建TCP請求和銷毀,可以節約寬帶和服務器的資源。

三、webSocket如何兼容低瀏覽器?
1、Adobe Flash Socket
2、ActiveX HTMLFile(IE)
3、基於multipart編碼發送XHR
4、基於長輪詢的XHR

(3)CORS

CORS(Cross-Origin Resource Sharing),跨源資源共享,是W3C的一個工作草案,定義了在必須訪問跨源資源時,瀏覽器與服務器該如何溝通。其背后的基本思想是使用自定義的HTTP頭部,讓瀏覽器與服務器進行溝通,從而決定請求或響應是應該成功還是應該失敗。

24.foo=foo||bar ,這行代碼是什么意思?為什么要這樣寫?

這種寫法稱之為短路表達式

意思為:if(!foo) foo = bar; //如果 foo 存在,值不變,否則把 bar 的值賦給 foo。短路表達式:作為”&&”和”||”操作符的操作數表達式,這些表達式在進行求值時,只要 最終的結果已經可以確定是真或假,求值過程便告終止,這稱之為短路求值。

注意 if 條件的真假判定,記住以下是 false 的情況:
空字符串、false、undefined、null、0

25.正則表達式構造函數 var reg=new RegExp(“xxx”)與正則表達字面量 var reg=//有什么不同?匹配郵箱的正則表達式?

答案:當使用 RegExp()構造函數的時候,不僅需要轉義引號(即\”表示”),並且還需要雙反斜杠(即\表示一個\)。 使用正則表達字面量的效率更高。

郵箱的正則匹配:

var regMail = /^[A-Za-z\d]+[A-Za-z\d\-_\.]*@([A-Za-z\d]+[A-Za-z\d\-]*\.)+[A-Za-z]{2,4}$/;

 



 


免責聲明!

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



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