1. 程式人生 > >js前端面試題總結及答案

js前端面試題總結及答案

轉載https://yeaseonzhang.github.io/

“金三銀四,金九銀十”,用來形容求職最好的幾個月。但是隨著行業的飽和,初中級前端er就業形勢不容樂觀。

行業狀態不可控,我們能做的當然只是讓自己變得更加具有競爭力。

今年自己也用了幾個月的時間來準備筆記面試,鞏固基礎知識。特此將自己在這個過程總結的題目分享出來,希望對於求職和準備求職的同學有所幫助。

CSS

列舉不同的清除浮動的技巧

12345678910111213141516171819202122232425262728
/* 1.新增新元素 */<div class="outer">  <div class="div1"></div>  <div class="div2"></div>  <div class="div3"></div>  <div class="clearfix"></div></div>.clearfix {  clear: both;}/* 2.為父元素增加樣式 */.clearfix {  overflow: auto;  zoom: 1; // 處理相容性}/* 3.:after 偽元素方法 (作用於父元素) */.outer {  zoom: 1;  &:after {    display: block;    height: 0;    clear: both;    content: '.';    visibillity: hidden;  }}

一畫素邊框

使用sass語法。

12345678910111213141516171819202122232425262728293031323334
/* 定義 */@mixin border-1px ($color) {    position: relative;    &:after {        display: block;        position: absolute;        left: 0;        bottom: 0;        width: 100%;        border-top: 1px solid $color;        context: '';    }}@media (-webkit-min-device-pixel-radio: 1.5), (min-device-pixel-radio: 1.5) {    border-1px {        &:after {            -webkit-transform: scaleY(0.7);            transform: scaleY(0.7);        }    }}@media (-webkit-min-device-pixel-radio: 2), (min-device-pixel-radio: 2) {    border-1px {        &:after {            -webkit-transform: scaleY(0.5);            transform: scaleY(0.5);        }    }}/* 使用方式 */@inclue border-1px(rgba(7, 17, 27, .1));

形成BFC(Block Formatting Context)的幾種方式

BFC全稱”Block Formatting Context”, 中文為“塊級格式化上下文”。BFC元素特性表現原則就是,內部子元素再怎麼翻江倒海,翻雲覆雨都不會影響外部的元素。

  • float為 left|right
  • overflow為 hidden|auto|scroll
  • display為 table-cell|table-caption|inline-block
  • position為 absolute|fixed

佈局

  • 左定寬右自適應寬度,並且等高佈局(最小高度200px)

123456789101112131415161718192021222324252627282930
/* HTML */<div class="container">  <div class="left">Left silder</div>  <div class="content">Main content</div></div>/* CSS */.container {  overflow: hidden;}.left {  float: left;  width: 200px;  margin-bottom: -9999px;  padding-bottom: 9999px;  background-color: #eee;}.content {  margin-left: 200px;  margin-bottom: -9999px;  padding-bottom: 9999px;  background-color: #ccc;}.left, .content {  min-height: 200px;  height: auto !important;}

JS

asyncdefer區別

非同步(async) 指令碼將在其載入完成後立即執行,而 延遲(defer) 指令碼將等待 HTML 解析完成後,並按載入順序執行。

location.replace()location.asign()區別

location.replace()的url不會出現在history中

new操作符

  • 建立一個空物件,並且this變數引用該物件,同時還繼承了 該函式的原型
  • 屬性和方法被加入到this引用的物件中
  • 新建立的物件由this所引用,並且最後隱式的返回this

AMD CMD CommonJS

12345678910111213141516171819
/* AMD是RequireJS對模組化的定義 * CMD是seaJS對模組化的定義 * CommonJS是Node對模組化的規範 **//* AMD 依賴關係前置 */define(['./a', './b'], function (a, b) {    a.something();    b.something();})/* CMD 按需載入,依賴就近 */define(function (require, exports, module) {    var a = require('./a');    a.something();    var b = require('./b');    b.something();})

DOM 操作

123456789101112131415161718
// 建立節點createDocumentFragment()createElement()createTextNode()// 新增 移除 替換 插入appendChild()removeChild()replaceChild()insertBefore()// 查詢getElementsByTagName()getElementsByName()getElementsByClassName()getElementById()querySelector()querySelectorAll()

JS設定css樣式的幾種方式

1234567891011121314
/* 1.直接設定style屬性 */element.style.height = '100px';/* 2.直接設定屬性 */element.setAttribute('height', '100px');/* 3.使用setAttribute設定style屬性 */element.setAttribute('style', 'height: 100px !important');/* 4.使用setProperty設定屬性,通過第三個引數設定important */element.style.setProperty('height', '300px', 'important');/* 5.設定cssText */element.style.cssText += 'height: 100px !important';

阻止預設行為

12345678910
function stopDefault( e ) {    // 阻止預設瀏覽器動作(W3C)    if ( e && e.preventDefault ) {        e.preventDefault();    } else {        // IE中阻止函式器預設動作的方式        window.event.returnValue = false;    }    return false;}

阻止冒泡

12345678910
function stopBubble(e) {    // 如果提供了事件物件,則這是一個非IE瀏覽器    if ( e && e.stopPropagation ) {        // 因此它支援W3C的stopPropagation()方法        e.stopPropagation();    } else {        // 否則,我們需要使用IE的方式來取消事件冒泡        window.event.cancelBubble = true;    }}

Ajax互動過程

  • 建立XMLHttpRequest物件,也就是建立一個非同步呼叫物件.
  • 建立一個新的HTTP請求,並指定該HTTP請求的方法、URL及驗證資訊.
  • 設定響應HTTP請求狀態變化的函式.
  • 傳送HTTP請求.
  • 獲取非同步呼叫返回的資料.
  • 使用JavaScript和DOM實現區域性重新整理.

考察知識點最廣的JS面試題

1234567891011121314151617
function Foo() {    getName = function () { alert(1); }    return this;}Foo.getName = function () { alert(2); }Foo.prototype.getName = function () { alert(3); }var getName = function () { alert(4); }function getName () { alert(5); }/* 寫出輸出 */Foo.getName();getName();Foo().getName();getName();new Foo.getName();new Foo().getName();new new Foo().getName();

JS陣列深淺拷貝

  • slice實現
12345678
var arr = ['old', 1, true, null, undefined];var new_arr = arr.slice();new_arr[0] = 'new';console.log(arr) // ["old", 1, true, null, undefined]console.log(new_arr) // ["new", 1, true, null, undefined]
  • concat實現
12345678
var arr = ['old', 1, true, null, undefined];var new_arr = arr.concat();new_arr[0] = 'new';console.log(arr) // ["old", 1, true, null, undefined]console.log(new_arr) // ["new", 1, true, null, undefined]

以上兩種方法只是淺拷貝,如果陣列元素是基本型別,就會拷貝一份新的;但是如果陣列元素是物件或者陣列,就只會拷貝引用(類似指標),修改其中一個就會影響另外一個。

123456789
var arr = ['old', 1, true, ['old1', 'old2'], {old: 1}];var new_arr = arr.concat();new_arr[0] = 'new';new_arr[3][0] = 'new1';console.log(arr) // ["old", 1, true, ['new1', 'old2'], {old: 1}]console.log(new_arr) // ["new", 1, true, ['new1', 'old2'], {old: 1}]
  • JSON.stringify實現陣列深拷貝
123456789
var arr = ['old', 1, true, ['old1', 'old2'], {old: 1}];var new_arr = JSON.parse(JSON.stringify(arr));new_arr[0] = 'new';new_arr[3][0] = 'new1';console.log(arr) // ["old", 1, true, ['old1', 'old2'], {old: 1}]console.log(new_arr) // ["new", 1, true, ['new1', 'old2'], {old: 1}]

簡單粗暴,但是問題是不能拷貝函式,不推薦。

然後我們來手動實現深淺拷貝。

  • 淺拷貝
12345678910111213
var shallowCopy = function (obj) {	// 判斷是否是陣列或者物件    if (typeof obj !== 'object') {        return    }    var newObj = obj instanceof Array ? [] : {};    for (var key in obj) {        if (obj.hasOwnProperty(key)) {            newObj[key] = obj[key];        }    }    return newObj;}
  • 深拷貝
123456789101112
var deepCopy = function (obj) {    if (typeof obj !== 'object') {        return    }    var newObj = obj instanceof Array ? [] : {};    for (var key in obj) {        if (obj.hasOwnProperty(key)) {            newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];        }    }    return newObj}

陣列去重

  • filter + indexOf
123456
function unique (arr) {    var res = arr.filter(function (item, index, array) {        return array.indexOf(item) === index;    })    return res;}
  • filter + sort
12345
function unique (arr) {    return arr.concat().sort().filter(function (item, index, array) {        return !index || item !== array[index - 1];    })}
  • ES6
123
function uniqu3 (arr) {    return [... new Set(arr)];}

找出陣列中的最大值

  • reduce
1234567
var arr = [6, 4, 1, 8, 2, 11, 3];function max (prev, next) {    return Math.max(prev, next)}console.log(arr.reduce(max));
  • apply
123
var arr = [6, 4, 1, 8, 2, 11, 3];console.log(Math.max.apply(null, arr));
  • ES6
1234567
var arr = [6, 4, 1, 8, 2, 11, 3];function max (arr) {    return Math.max(...arr);}console.log(max(arr));

打亂陣列的方法

相關推薦

js端面試題總結答案

轉載https://yeaseonzhang.github.io/ “金三銀四,金九銀十”,用來形容求職最好的幾個月。但是隨著行業的飽和,初中級前端er就業形勢不容樂觀。 行業狀態不可控,我們能做的當然只是讓自己變得更加具有競爭力。 今年自己也用了幾個月的時間來準備筆記面試,鞏固基礎

JS端面試題-總結01

大家都知道在面試的時候,很多前端的必須要問的就是js的問題,最近我們公司也有很多這樣的面試,我提了一些個問題,還有我面試的時候面試官面試我的問題彙總,也有百度的別人的,希望對那些剛進入這個行業的有一些幫助!!! 1.javascript的typeof返回哪些資料型別 object number functio

端面試題總結二(js原型繼承)

his pro 一個 spa 文章 UNC 引用 nts 知識點 今天這篇文章整理了JS原型和繼承的一些知識點,面試的時候 基!本!都!會!問!還不快認真閱讀下文,看看你還有哪些知識點需要掌握吧~ 1.原型鏈 基本思想:利用原型讓一個引用類型繼承另外一個引用類型的屬性

2018年 年底web端面試題總結(附帶答案

javascript:  JavaScript中如何檢測一個變數是一個String型別?請寫出函式實現 typeof(obj) === "string" typeof obj === "string" obj.constructor === String 請用js去除字串空格? 方法一:使

端面試題總結--1 JS

妹子就要找工作了,所以時候要研究一下面試題,總結一下,查缺補漏。 所以要開始搜刮各種的面試題做練習啦~~ 1.JS中DOM節點操作,新增,刪除,插入,查詢,建立,複製節點 //1.建立節點 document.create

端面試題總結:HTML5,JS,CSS3,相容性。

1、 請寫出至少20個HTML5標籤 <article><aside> <audio><video> <canvas><datalist><command> <details&g

web端面試題總結

1、javascript主要的資料型別:String、Number、boolean、Object、Null、Undefined 2、css盒子模型屬性包括:margin、border、padding、content 3、DOCTYPE 不存在或格式不正確會導致文件以混雜模式呈現 4、TCP是&

web 端面試題 總結

你如何理解HTML結構的語意化? 1、去掉或樣式丟失的時候能讓頁面呈現清晰的結構。 2、螢幕閱讀器(如果訪客有視障)會完全根據你的標記來"讀"你的網頁。 3、PDA、手機等裝置可能無法像普通電腦的瀏覽器一樣來渲染網頁(通常是因為這些裝置對CSS的支援較弱)。 4、搜尋引擎

2018web端面試題總結

以下內容純屬個人隨筆記錄,不喜勿噴,歡迎指教 web面試題 css面試 一、css盒模型 css中的盒子模型包括IE盒子模型和標準的W3C盒子模型。border-sizing: border-box, inherit, content-box標準盒子模型: 左右border+左右padding+con

分享一次端面試題及其詳細答案剖析

答 : 1、語義化標籤,比如<header></header>、<section></section>、<footer></footer>等等;     2、增強型表單,input輸入型別增強,提供了更好的輸入控制和驗證,

2018端面試題總結2

HTML5的離線儲存有幾種方式? 1.本地儲存localstorage 儲存方式: 以鍵值對(key-value)的方式儲存,永久儲存,永不失效,除非手動刪除。(每個域名5M) 儲存內容:陣列,圖片,json,樣式,指令碼… 2.本地儲存sessionstorage HT

web端面試題總結筆記——JavaScript部分

js中的變數型別 值型別和引用型別 值型別 undefined string number boolean 引用型別 object: ​ {} ​ [] ​ null ​ function 強制型別轉換 字串

web端面試題總結筆記——開發環境

關於開發環境 IDE webstorm:大牛 逼格 大咖 sublime:普通 低調 vscode:文藝小清新 atom:文藝小清新 外掛外掛外掛快捷鍵快捷鍵快捷鍵!!! Git 網路Git伺服器如 coding.net git

2018 vue端面試題總結

1、active-class是哪個元件的屬性?巢狀路由怎麼定義? 答:vue-router模組的router-link元件。   2、怎麼定義vue-router的動態路由?怎麼獲取傳過來的動態引數?  答:在router目錄下的index.js檔案中,對path屬性加上/

2018Web前端面試試題總結答案

1、完成的http請求過程需要經過哪些環節? 1)、域名解析; 2)、發起TCP的3次握手; 3)、建立TCP連線後發起http請求,瀏覽器得到html程式碼; 4)、瀏覽器解析HTML程式碼,並請求HTM

2016年全面端面試題總結

非同步載入的方式有哪些? (1) defer,只支援IE (2) async: (3) 建立script,插入到DOM中,載入完畢後callBack documen.write和 innerHTML的區別 document.write只能重繪整個頁面

( 百度Java面經)網際網路公司校招Java面試題總結答案——百度(目前只是部分總結

1.關鍵字transient 1)一旦變數被transient修飾,變數將不再是物件持久化的一部分,該變數內容在序列化後無法獲得訪問。 2)transient關鍵字只能修飾變數,而不能修飾方法和類。注意,本地變數是不能被transient關鍵字修飾的。變數如果是使用者自定

網際網路公司校招Java面試題總結答案——微店、去哪兒、蘑菇街

2.servlet和filter的區別。filter你在哪些地方用到過。 servlet是一種執行伺服器端的java應用程式,具有獨立於平臺和協議的特性,並且可以動態的生成web頁面,它工作在客戶端請求與伺服器響應的中間層。 1) 客戶端傳送請求至伺服器端; 2)

網際網路公司校招Java面試題總結答案——京東

自己最近在為找工作做準備,總結了一下公司的面經,主要來源是牛客上17年秋招面經的一個總結帖:連結在這裡。 感謝各位貢獻面經的同學以及牛妹的總結,我做的工作就是把問題收集起來,並一個個找到我認為還不錯的答案,所以這個過程中也很感謝網際網路的各個部落格的博主貢獻的相關知識。

2019年Web端面試題總結

Web前端在近幾年是越來越火熱了,很多人看到了前端的高薪資,更看到了前端行業的發展前景,所以紛紛投入到學習前端技術學習中來。下面給大家總結整理2019年Web前端經典面試題,助力大家找到更好的工作,走向高薪前端之路。 1、CSS,JS程式碼壓縮,以及程式碼CDN託管,圖片整合。 (1