HTML、JS常見面試題

Q 1.一個200*200的div在不同分辨率屏幕上下左右居中,用css實現(xiàn)

div {

position:absolute;

width:200px;

height:200px;

top:50%;

left:50%;

margin-left:-50px;

height:-50px;

z-index:1000;

}

Q 2 .? 闡述清楚浮動的幾種方式(常見問題)


1.父級div定義 height

原理:父級div手動定義height,就解決了父級div無法自動獲取到高度的問題。

優(yōu)點:簡單、代碼少、容易掌握

缺點:只適合高度固定的布局,要給出精確的高度,如果高度和父級div不一樣時,會產(chǎn)生問題

2.父級div定義 overflow:hidden

原理:必須定義width或zoom:1,同時不能定義height,使用overflow:hidden時,瀏覽器會自動檢查浮動區(qū)域的高度

優(yōu)點:簡單、代碼少、瀏覽器支持好

3. 結(jié)尾處加空div標簽 clear:both

原理:添加一個空div,利用css提高的clear:both清除浮動,讓父級div能自動獲取到高度

優(yōu)點:簡單、代碼少、瀏覽器支持好、不容易出現(xiàn)怪問題

缺點:不少初學(xué)者不理解原理;如果頁面浮動布局多,就要增加很多空div,讓人感覺很不好

4.父級div定義 偽類:after

Q 3 . 解釋css sprites ,如何使用?

CSS Sprites其實就是把網(wǎng)頁中一些背景圖片整合到一張圖片文件中,再利用CSS的“background-image”,“background- repeat”,“background-position”的組合進行背景定位,background-position可以用數(shù)字能精確的定位出背景圖片的位置。

CSS Sprites為一些大型的網(wǎng)站節(jié)約了帶寬,讓提高了用戶的加載速度和用戶體驗,不需要加載更多的圖片


Q 4 .? 開發(fā)過程中遇到的內(nèi)存泄露情況,如何解決的?

內(nèi)存泄露的幾種情況:

(1)、當頁面中元素被移除或替換時,若元素綁定的事件仍沒被移除,在IE中不會作出恰當處理,此時要先手工移除事件,不然會存在內(nèi)存泄露。

btn.onclick = function(){

? ? btn.onclick =null;

? ? ? ? document.getElementById("myDiv").innerHTML ="Processing...";

? ? }

(2)、由于是函數(shù)內(nèi)定義函數(shù),并且內(nèi)部函數(shù)--事件回調(diào)的引用外暴了,形成了閉包。閉包可以維持函數(shù)內(nèi)局部變量,使其得不到釋放。

實例如下:

obj.onclick=function(){

? ? ? ? //Even if it's a empty function? ? }

? ? obj=null;

Q 5 . javascript面向?qū)ο笾欣^承實現(xiàn)?

面向?qū)ο蟮幕咎卣饔校悍忾]、繼承、多態(tài)。

在JavaScript中實現(xiàn)繼承的方法:

1. 原型鏈(prototype chaining)

2. call()/apply()

3. 混合方式(prototype和call()/apply()結(jié)合)

4. 對象冒充

Q 6 .請描述一下 cookies sessionStorage和localstorage區(qū)別

相同點:都存儲在客戶端

不同點:1.存儲大小

· cookie數(shù)據(jù)大小不能超過4k。

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

2.有效時間

· localStorage? ? 存儲持久數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失除非主動刪除數(shù)據(jù);

· sessionStorage? 數(shù)據(jù)在當前瀏覽器窗口關(guān)閉后自動刪除。

· cookie? ? ? ? ? 設(shè)置的cookie過期時間之前一直有效,即使窗口或瀏覽器關(guān)閉

3. 數(shù)據(jù)與服務(wù)器之間的交互方式

· cookie的數(shù)據(jù)會自動的傳遞到服務(wù)器,服務(wù)器端也可以寫cookie到客戶端

· sessionStorage和localStorage不會自動把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存。

Q 7 . document.write和innerHTML的區(qū)別:

document.write是直接寫入到頁面的內(nèi)容流,如果在寫之前沒有調(diào)用document.open, 瀏覽器會自動調(diào)用open。每次寫完關(guān)閉之后重新調(diào)用該函數(shù),會導(dǎo)致頁面被重寫。

innerHTML則是DOM頁面元素的一個屬性,代表該元素的html內(nèi)容。你可以精確到某一個具體的元素來進行更改。如果想修改document的內(nèi)容,則需要修改document.documentElement.innerElement。

innerHTML將內(nèi)容寫入某個DOM節(jié)點,不會導(dǎo)致頁面全部重繪

innerHTML很多情況下都優(yōu)于document.write,其原因在于其允許更精確的控制要刷新頁面的那一個部分。

Q 8 . AJAX的四個步驟:

第一步,創(chuàng)建xmlhttprequest對象

第二步,使用xmlhttprequest對象的open()和send()方法發(fā)送資源請求給服務(wù)器

第三步,使用xmlhttprequest對象的responseText或responseXML屬性獲得服務(wù)器的響應(yīng)。

第四步,onreadystatechange函數(shù),當發(fā)送請求到服務(wù)器,我們想要服務(wù)器響應(yīng)執(zhí)行一些功能就需要使用onreadystatechange函數(shù),每次xmlhttprequest對象的readyState發(fā)生改變都會觸發(fā)onreadystatechange函數(shù)

Q 9 . xml和json的區(qū)別,請用四個詞語來形容

·? JSON相對于XML來講,數(shù)據(jù)的體積小,傳遞的速度更快些

·? JSON與JavaScript的交互更加方便,更容易解析處理,更好的數(shù)據(jù)交互

·XML對數(shù)據(jù)描述性比較好;

·? JSON的速度要遠遠快于XML

Q 10 . 三個盒子,左右定寬,中間自適應(yīng)有幾種方法

<div style="width:100%; margin:0 auto;">

? ? ? <div style="width:200px; float:right; background-color:#960">這是右側(cè)的內(nèi)容 固定寬度</div>

? ? ? <div style="width:150px; float:left; background:#6FF">這是左側(cè)的內(nèi)容 固定寬度</div>

? ? ? <div style="margin-left:150px;margin-right:200px; background-color:#9F3">中間內(nèi)容,自適應(yīng)寬度</div>

</div>

Q 11 . js基本數(shù)據(jù)類型(簡單數(shù)據(jù)類型)有哪些, 引用類型

五種基本類型: Undefined、Null、Boolean、Number和String。

引用類型? object、array、function

六種類型:Undefined、null、object、boolean、number、string

Q 12 . null 和 undefined

null: Null類型,代表“空值”,代表一個空對象指針,使用typeof運算得到 “object”,所以你可以認為它是一個特殊的對象值。

undefined: Undefined類型,當一個聲明了一個變量未初始化時,得到的就是undefined。

都表示“值的空缺”,你可以認為undefined是表示系統(tǒng)級的、出乎意料的或類似錯誤的值的空缺,而null是表示程序級的、正常的或在意料之中的值的空缺。

Q 14 . 什么是mvvm mvc是什么區(qū)別 原理

一、MVC(Model-View-Controller)

MVC是比較直觀的架構(gòu)模式,用戶操作->View(負責接收用戶的輸入操作)->Controller(業(yè)務(wù)邏輯處理)->Model(數(shù)據(jù)持久化)->View(將結(jié)果反饋給View)。

MVC使用非常廣泛,比如JavaEE中的SSH框架

二、MVVM(Model-View-ViewModel)

如果說MVP是對MVC的進一步改進,那么MVVM則是思想的完全變革。它是將“數(shù)據(jù)模型數(shù)據(jù)雙向綁定”的思想作為核心,因此在View和Model之間沒有聯(lián)系,通過ViewModel進行交互,而且Model和ViewModel之間的交互是雙向的,因此視圖的數(shù)據(jù)的變化會同時修改數(shù)據(jù)源,而數(shù)據(jù)源數(shù)據(jù)的變化也會立即反應(yīng)view。

Q 15 . px和em的區(qū)別

px表示像素 (計算機屏幕上的一個點:1px = 1/96in),是絕對單位,不會因為其他元素的尺寸變化而變化;

em表示相對于父元素的字體大小。em是相對單位 ,沒有一個固定的度量值,而是由其他元素尺寸來決定的相對值。

Q 16 . 優(yōu)雅降級和漸進增強

漸進增強(Progressive Enhancement):一開始就針對低版本瀏覽器進行構(gòu)建頁面,完成基本的功能,然后再針對高級瀏覽器進行效果、交互、追加功能達到更好的體驗。

優(yōu)雅降級(Graceful Degradation):一開始就構(gòu)建站點的完整功能,然后針對瀏覽器測試和修復(fù)。比如一開始使用 CSS3 的特性構(gòu)建了一個應(yīng)用,然后逐步針對各大瀏覽器進行 hack 使其可以在低版本瀏覽器上正常瀏覽。

其實漸進增強和優(yōu)雅降級并非什么新概念,只是舊的概念換了一個新的說法。在傳統(tǒng)軟件開發(fā)中,經(jīng)常會提到向上兼容和向下兼容的概念。漸進增強相當于向上兼容,而優(yōu)雅降級相當于向下兼容

Q 17 . JS哪些操作會造成內(nèi)存泄露

1)意外的全局變量引起的內(nèi)存泄露

2)閉包引起的內(nèi)存泄露

3)沒有清理的DOM元素引用

4)被遺忘的定時器或者回調(diào) 5)子元素存在引起的內(nèi)存泄露

Q 18 .瀏覽器緩存有哪些,通常緩存有哪幾種

http緩存、websql、cookie、localstorage、sessionstorage、flash緩存

19.? css中的小知識點

(1)文本首行縮進:text-index

(2)水平對齊:margin: 0 auto; text-align: center

(3)多行文字垂直居中:

? ? ? ? ? ? ? ? ? ? ? ? ? 父:display:table

? ? ? ? ? ? ? ? ? ? ? ? ? ? 子:display:table-ceil;vertical-align:middle

(3)鼠標變小手:cursor:pointer

(4)li去點:list-style:none

(5)去下劃線:text-decoration:none

(6)background-size:center---能看到圖片中心,會被填滿

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? contain---全部都能看到,但是可能填不滿

20.? 塊級元素有哪些? 行級元素有那些?

塊級:table、ul、div、li、h1、p、form

行級(內(nèi)聯(lián)):a、input、img

21.? 轉(zhuǎn)塊級元素、轉(zhuǎn)行內(nèi)元素、轉(zhuǎn)行內(nèi)塊級元素

塊:display:block

行:display:inline

行內(nèi)塊:display:inline-block

22.? 響應(yīng)式定位:

(1)寫在父類:display:flex

? ? ? ? ? ? ? ? ? ? ? ? ? ? flex-wrap:父類如果寬度不夠,考慮換行

(2)水平居中:jstify-content:center

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? space? between? 左右對齊,中間等距

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? space around? 等距分布

(3)垂直居中:align-items:center

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? flex-start

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? flex-end

23.? let 和const的區(qū)別:

let與const都是只在聲明所在的塊級作用域內(nèi)有效。

let聲明的變量可以改變,值和類型都可以改變,沒有限制。

const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。

24.? Ajax請求時,如何解釋json數(shù)據(jù)?

1.直接定義返回數(shù)據(jù)類型為json,然后請求成功后返回的數(shù)據(jù)就是json數(shù)據(jù),

2.直接使用JSON.parse ()

25.? 下面代碼輸出什么?

var salary = "1000$";

(function () {

? ? console.log("Original salary was " + salary);

? ? var salary = "5000$";

? ? console.log("My New Salary " + salary);

})();

答案:

Original salary was undefined

My New Salary 5000$

26.? 下面代碼輸出什么?

var z = 1, y = z = typeof y;

console.log(y);

答案:

undefined

27.? JavaScript 中undefined和not defined的區(qū)別

未聲明變量直接使用會拋出異常:var name is not defined,如果沒有處理異常,代碼就停止運行了。

undefined,不會發(fā)生異常

28.? 下面的代碼輸出什么?

var y = 1;

if (function f(){}) {

? ? y += typeof f;

}

console.log(y);

答案: 1undefined。

29.? JavaScript中什么是閉包?寫出一個例子

var func = function () {

? ? ? ? ? ? var a=1;

? ? ? ? ? ? ? ? return function (){

? ? ? ? ? ? ? ? ? ? a++;

? ? ? ? ? ? ? ? ? ? console.log(a);

? ? ? ? ? ? ? ? };

? ? ? ? ? ? }

30.? 寫一個mul函數(shù),使用方法如下。

function mul (x) {

? ? return function (y) {

? ? ? ? return function (z) {

? ? ? ? ? ? return x * y * z;

? ? ? ? };

? ? };

}

31.? JavaScript怎么清空數(shù)組?

1.? arrayList= [];

2.? arrayList.length = 0;

32.? 怎么判斷一個object是否是數(shù)組(array)?

function isArray(obj){

? ? return Object.prototype.toString.call( obj ) === '[object Array]';

}

33.? 下面代碼輸出什么?

var output = (function(x){

? ? delete x;

? ? return x;

})(0);

console.log(output);

答案:0

delete 操作符是將object的屬性刪去的操作

34.? 下面代碼輸出什么?

var x = { foo : 1};

var output = (function(){

? ? delete x.foo;

? ? return x.foo;

})();

console.log(output);

答案:undefine

35.? 下面代碼輸出什么?

var Employee = {

? ? company: 'xyz'

}

var emp1 = Object.create(Employee);

delete emp1.company

console.log(emp1.company);

輸出是 xyz,這里的 emp1 通過 prototype 繼承了 Employee的 company。emp1自己并沒有company屬性。所以delete操作符的作用是無效的。

36.? 什么是undefined x 1?

當我們使用 delete 操作符刪除一個數(shù)組中的元素,這個元素的位置就會變成一個占位符。打印出來就是undefined x 1。

37.? 下面代碼輸出什么?

var trees = ["xyz","xxxx","test","ryan","apple"];

delete trees[3];

console.log(trees.length);

輸出是5。因為delete操作符并不是影響數(shù)組的長度。

38.? 下面代碼輸出什么?

var bar = true;

console.log(bar + 0);

console.log(bar + "xyz");

console.log(bar + true);

console.log(bar + false);

答案

1

truexyz

2

1

下面給出一個加法操作表

Number + Number -> 加法

Boolean + Number -> 加法

Boolean + Boolean -> 加法

Number + String -> 連接

String + Boolean -> 連接

String + String -> 連接

39.? 下面代碼輸出什么?

var foo = function bar(){ return 12; };

typeof bar();

答案:bar is not defined

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

H5新特性:增強了圖形渲染、影音、數(shù)據(jù)存儲、多任務(wù)處理:繪畫 canvas、localStorage、事件監(jiān)聽、 sessionStorage、websocket

移除的元素:<font> 字體標簽、 <center> 水平居中、 <u> 下劃線、 <big>

解決:document.createElement、最好的方式是直接使用成熟的框架、使用最多的是html5shim框架

41.? 介紹一下標準的CSS的盒子模型?低版本IE的盒子模型有什么不同的?

CSS盒子模型:由四個屬性組成的外邊距(margin)、內(nèi)邊距(padding)、邊界(border)、內(nèi)容區(qū)(width和height);

標準的CSS盒子模型和低端IE CSS盒子模型不同:寬高不一樣

  標準的css盒子模型寬高就是內(nèi)容區(qū)寬高;

  低端IE css盒子模型寬高 內(nèi)邊距﹢邊界﹢內(nèi)容區(qū);

42. 在設(shè)置li標簽display:inline-block;屬性后,li之間出現(xiàn)空白間隙的原因,有什么解決辦法

原因:<li>標簽我們在書寫的時候為了代碼的簡潔直觀會換行,但是瀏覽器在解析的時候會把這個換行解析成一個字符。

解決辦法:標簽不換行、magin負值、讓li不閉合

43.? magin 和padding 分別適合什么場景使用

margin:

? ? 需要在border外側(cè)添加空白時;

? ? 空白處不需要背景(色)時;

? ? 上下相連的兩個盒子之間的空白,需要相互抵消時。

padding:

? ? 需要在border內(nèi)測添加空白時;

? ? 空白處需要背景(色)時;

? ? 上下相連的兩個盒子之間的空白,希望等于兩者之和時。

44.? localStorage的存儲數(shù)組對象的方式

localStorage存儲數(shù)據(jù)的格式都是以字符串的形式來存儲的,

45.? 前端解決跨域問題

解決跨域問題常用的解決方案有兩個:

JSONP:利用script標簽可跨域的特點,在跨域腳本中可以直接回調(diào)當前腳本的函數(shù)。

CORS:服務(wù)器設(shè)置HTTP響應(yīng)頭中Access-Control-Allow-Origin值,解除跨域限制。

46.? post和get請求的區(qū)別

最直觀的區(qū)別就是GET把參數(shù)包含在URL中,POST通過request body傳遞參數(shù)

GET和POST本質(zhì)上就是TCP鏈接,但是由于HTTP的規(guī)定和瀏覽器/服務(wù)器的限制,導(dǎo)致他們在應(yīng)用過程中體現(xiàn)出一些不同。 GET產(chǎn)生一個TCP數(shù)據(jù)包;POST產(chǎn)生兩個TCP數(shù)據(jù)包。(并不是所有瀏覽器都會在POST中發(fā)送兩次包,F(xiàn)irefox就只發(fā)送一次)

47.? 請求提交的方式有?

post、get、put、delete

48.? ES5和ES6區(qū)別

多了let,匿名函數(shù),不適用原型鏈繼承類

49.? 瀏覽器內(nèi)核有?

四大內(nèi)核分別是:Trident(也稱IE內(nèi)核)、webkit、Blink、Gecko

50.? Doctype作用

<!Doctype>聲明位于文檔中的最前面,處于<html>標簽之前。告知瀏覽器的解析器,用什么文檔類型規(guī)范來解析這個文檔。

51.? 導(dǎo)入css樣式有哪幾種

1. 行內(nèi)式? ? <span style="color:red;">行內(nèi)式</span>? ? ? 寫在body標簽中

2. 嵌入式? ? 在style標簽中寫css樣式,在body中引用

3. link

4. @import

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 28,815評論 1 45
  • 根據(jù)自己的實際面試經(jīng)驗以及網(wǎng)上常見的面試題整理的。 基礎(chǔ) 1.怎樣添加、移除、移動、復(fù)制、創(chuàng)建和查找節(jié)點? ①創(chuàng)建...
    XKolento閱讀 11,836評論 2 17
  • 1.什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HTML5推出的設(shè)計目的,以及現(xiàn)在市場的使...
    一片空白1233閱讀 667評論 0 5
  • 前端開發(fā)面試題 面試題目: 根據(jù)你的等級和職位的變化,入門級到專家級,廣度和深度都會有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,683評論 0 7
  • Recognition, reconstruction and reorganization。Recognitio...
    VaultHunter閱讀 308評論 0 0

友情鏈接更多精彩內(nèi)容