1. JS基本的數(shù)據(jù)類型和引用類型
基本數(shù)據(jù)類型:number、string、null、undefined、boolean、symbol -- 棧
引用數(shù)據(jù)類型:object、array、function -- 堆
兩種數(shù)據(jù)類型存儲位置不同
原始數(shù)據(jù)類型是直接存儲在棧(stack)中的簡單數(shù)據(jù)段,占據(jù)空間小、大小固定,屬于被頻繁使用數(shù)據(jù);
引用數(shù)據(jù)類型存儲在堆(heap)中的對象,占據(jù)空間大、大小不固定,如果存儲在棧中,將會影響程序運行的性能;
引用數(shù)據(jù)類型在棧中存儲了指針,該指針指向堆中該實體的起始地址。
當解釋器尋找引用值時,會首先檢索其在棧中的地址,取得地址后從堆中獲得實體。
2.介紹JS的內(nèi)置對象數(shù)據(jù)封裝類對象:Object、String、Number、Boolean、Array
其他對象:Function、Data、Math、Arguments、RegExp、Error
ES6新增對象:Promise、Proxy、Map、Set、Symbol、Reflect
3.說幾條JavaScript的基本規(guī)范變量和函數(shù)在使用前聲明
語句結(jié)束后添加分號
代碼段使用{}包裹
以大寫字母開頭定義構(gòu)造函數(shù),以全大寫定義常量
用{} 和 []聲明對象和數(shù)組
使用===和!==來比較true和false或者數(shù)字值
4.eval是做什么的他的功能是把對應(yīng)的字符串解析成JS代碼并運行;
他不安全,而且非常耗能(執(zhí)行兩次,一次解析成JS代碼,一次執(zhí)行)
5.對閉包的理解閉包是指有權(quán)訪問另一個函數(shù)作用域中變量的函數(shù),創(chuàng)建閉包的最常見的方式就是在一個函數(shù)里創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部變量,利用閉包可以突破作用域鏈,將函數(shù)內(nèi)部的變量和方法傳遞到外部
閉包的特性:函數(shù)內(nèi)嵌套函數(shù);內(nèi)部函數(shù)可以引用外部的參數(shù)和變量;參數(shù)和變量不會被垃圾回收機制回收6.http狀態(tài)碼有哪些
簡單版
100 Continue 繼續(xù),一般在發(fā)送post請求時,已發(fā)送了http header之后服務(wù)端將返回此信息,表示確認,之后發(fā)送具體參數(shù)信息 200 OK 正常返回信息 201 Created 請求成功并且服務(wù)器創(chuàng)建了新的資源 202 Accepted 服務(wù)器已接受請求,但尚未處理 301 Moved Permanently 請求的網(wǎng)頁已永久移動到新位置。 302 Found 臨時性重定向。 303 See Other 臨時性重定向,且總是使用 GET 請求新的 URI。 304 Not Modified 自從上次請求后,請求的網(wǎng)頁未修改過。 400 Bad Request 服務(wù)器無法理解請求的格式,客戶端不應(yīng)當嘗試再次使用相同的內(nèi)容發(fā)起請求。 401 Unauthorized 請求未授權(quán)。 403 Forbidden 禁止訪問。 404 Not Found 找不到如何與 URI 相匹配的資源。 500 Internal Server Error 最常見的服務(wù)器端錯誤。 503 Service Unavailable 服務(wù)器端暫時無法處理請求(可能是過載或維護)。
完整版
1**(信息類):表示接收到請求并且繼續(xù)處理 100——客戶必須繼續(xù)發(fā)出請求 101——客戶要求服務(wù)器根據(jù)請求轉(zhuǎn)換HTTP協(xié)議版本 2**(響應(yīng)成功):表示動作被成功接收、理解和接受 200——表明該請求被成功地完成,所請求的資源發(fā)送回客戶端 201——提示知道新文件的URL 202——接受和處理、但處理未完成 203——返回信息不確定或不完整 204——請求收到,但返回信息為空 205——服務(wù)器完成了請求,用戶代理必須復(fù)位當前已經(jīng)瀏覽過的文件 206——服務(wù)器已經(jīng)完成了部分用戶的GET請求 3**(重定向類):為了完成指定的動作,必須接受進一步處理 300——請求的資源可在多處得到 301——本網(wǎng)頁被永久性轉(zhuǎn)移到另一個URL 302——請求的網(wǎng)頁被轉(zhuǎn)移到一個新的地址,但客戶訪問仍繼續(xù)通過原始URL地址,重定向,新的URL會在response中的Location中返回,瀏覽器將會使用新的URL發(fā)出新的Request。 303——建議客戶訪問其他URL或訪問方式 304——自從上次請求后,請求的網(wǎng)頁未修改過,服務(wù)器返回此響應(yīng)時,不會返回網(wǎng)頁內(nèi)容,代表上次的文檔已經(jīng)被緩存了,還可以繼續(xù)使用 305——請求的資源必須從服務(wù)器指定的地址得到 306——前一版本HTTP中使用的代碼,現(xiàn)行版本中不再使用 307——申明請求的資源臨時性刪除 4**(客戶端錯誤類):請求包含錯誤語法或不能正確執(zhí)行 400——客戶端請求有語法錯誤,不能被服務(wù)器所理解 401——請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用 402——保留有效ChargeTo頭響應(yīng) 403——禁止訪問,服務(wù)器收到請求,但是拒絕提供服務(wù) 404——一個404錯誤表明可連接服務(wù)器,但服務(wù)器無法取得所請求的網(wǎng)頁,請求資源不存在。eg:輸入了錯誤的URL 405——用戶在Request-Line字段定義的方法不允許 406——根據(jù)用戶發(fā)送的Accept拖,請求資源不可訪問 407——類似401,用戶必須首先在代理服務(wù)器上得到授權(quán) 408——客戶端沒有在用戶指定的餓時間內(nèi)完成請求 409——對當前資源狀態(tài),請求不能完成 410——服務(wù)器上不再有此資源且無進一步的參考地址 411——服務(wù)器拒絕用戶定義的Content-Length屬性請求 412——一個或多個請求頭字段在當前請求中錯誤 413——請求的資源大于服務(wù)器允許的大小 414——請求的資源URL長于服務(wù)器允許的長度 415——請求資源不支持請求項目格式 416——請求中包含Range請求頭字段,在當前請求資源范圍內(nèi)沒有range指示值,請求也不包含If-Range請求頭字段 417——服務(wù)器不滿足請求Expect頭字段指定的期望值,如果是代理服務(wù)器,可能是下一級服務(wù)器不能滿足請求長。 5**(服務(wù)端錯誤類):服務(wù)器不能正確執(zhí)行一個正確的請求 500 - 服務(wù)器遇到錯誤,無法完成請求 502 - 網(wǎng)關(guān)錯誤 503:由于超載或停機維護,服務(wù)器目前無法使用,一段時間后可能恢復(fù)正常7.描述瀏覽器渲染的過程,DOM書和渲染樹的區(qū)別
瀏覽器渲染過程:
解析HTML構(gòu)建DOM,并行請求css、image、js
css文件下載完成,開始構(gòu)建CSSOM(CSS樹)
CSSOM構(gòu)建結(jié)束后,和DOM一起生成Render Tree(渲染樹)
布局(layout):計算出每個節(jié)點在屏幕中的位置
顯示:通過顯卡把頁面畫到屏幕上
DOM樹和渲染樹的區(qū)別
DOM樹與HTML標簽一一對應(yīng),包括head和隱藏元素
渲染樹不包括head和隱藏元素,大段文本的每一個行都是獨立節(jié)點,每一個獨立節(jié)點都有對應(yīng)的css屬性
8.如何最小化重繪(repaint)和回流(reflow)需要創(chuàng)建多個DOM節(jié)點時,使用DocumentFragment創(chuàng)建完成后一次性的加入document
緩存layout屬性值,減少回流次數(shù),如const offsetLeft=element.offsetLeft
盡量避免使用table布局(table元素一旦觸發(fā)回流就會導(dǎo)致table里所有的其他元素回流)
避免使用css表達式,因為每次調(diào)用都會重新計算值(也會重新加載頁面)
盡量使用css屬性簡寫
將多次修改元素樣式合并成一次操作
9.介紹JavaScript的原型、原型鏈?有啥特點原型:
JavaScript的所有對象中都包含了一個 (__proto__ ) 內(nèi)部屬性,這個屬性所對應(yīng)的就是該對象的原型
JavaScript的函數(shù)對象,除了原型 (__proto__) 之外,還預(yù)置了 prototype 屬性
當函數(shù)對象作為構(gòu)造函數(shù)創(chuàng)建實例時,該 prototype 屬性值將被作為實例對象的原型( __proto__)。
原型鏈:
當一個對象調(diào)用的屬性/方法自身不存在時,就會去自己(__proto__ )關(guān)聯(lián)的前輩 prototype 對象上去找
如果沒找到,就會去該 prototype 原型 ( __proto__) 關(guān)聯(lián)的前輩 prototype 去找。依次類推,直到找到屬性/方法或 undefined 為止。從而形成了所謂的“原型鏈”
原型特點:
JavaScript對象是通過引用來傳遞的,當修改原型時,與之相關(guān)的對象也會繼承這一改變
10.JavaScript如何實現(xiàn)繼承構(gòu)造函數(shù)綁定:使用 call 或 apply 方法,將父對象的構(gòu)造函數(shù)綁定在子對象上
function Apple(size, num) { Fruit.apply(this, arguments); this.size = size; this.num = num; }
ES6使用extends繼承
class Apple extends Fruit{ constructor() { super() } }
實例繼承:將子對象的prototype指向父對象的一個實例
Apple.prototype = new Fruit() Apple.prototype.constructor = Apple
原型繼承
function inherits(Child, Parent) { var F = function () {}; F.prototype = Parent.prototype; Child.prototype = new F(); Child.prototype.constructor = Child; }
拷貝繼承:如果把父對象的所有屬性和方法,拷貝進子對象
function extend(Child, Parent) { var p = Parent.prototype; var c = Child.prototype; for (var i in p) { c[i] = p[i]; } }11.什么是window對象,什么是Document對象
Window 對象表示當前瀏覽器的窗口,是JavaScript的頂級對象。
我們創(chuàng)建的所有對象、函數(shù)、變量都是 Window 對象的成員。
Window 對象的方法和屬性是在全局范圍內(nèi)有效的。
Document 對象是 HTML 文檔的根節(jié)點與所有其他節(jié)點(元素節(jié)點,文本節(jié)點,屬性節(jié)點, 注釋節(jié)點)
Document 對象使我們可以通過腳本對 HTML 頁面中的所有元素進行訪問
Document 對象是 Window 對象的一部分,可通過 window.document 屬性對其進行訪問
12. 在一個DOM上同時綁定兩個點擊事件:一個用捕獲,一個用冒泡。事件會執(zhí)行幾次,先執(zhí)行冒泡還是捕獲?該DOM上的事件如果被觸發(fā),會執(zhí)行兩次(執(zhí)行次數(shù)等于綁定次數(shù))
如果該DOM是目標元素,則按事件綁定順序執(zhí)行,不區(qū)分冒泡/捕獲
如果該DOM是處于事件流中的非目標元素,則先執(zhí)行捕獲,后執(zhí)行冒泡
13. 事件的代理/委托事件委托是指將事件綁定目標元素的到父元素上,利用冒泡機制觸發(fā)該事件
優(yōu)點:
可以減少事件注冊,節(jié)省大量內(nèi)存占用
可以將事件應(yīng)用于動態(tài)添加的子元素上
缺點:
使用不當會造成事件在不應(yīng)該觸發(fā)時觸發(fā)
14. 編寫一個方法 求一個字符串的字節(jié)長度function GetBytes(str){ var len = str.length; var bytes = len; for(var i=0; i15. 列舉一下JavaScript數(shù)組和對象有哪些原生方法?255) bytes++; } return bytes; } alert(GetBytes("你好,as"));
數(shù)組:
arr.concat(arr1, arr2, arrn); arr.join(","); arr.sort(func); arr.pop(); arr.push(e1, e2, en); arr.shift(); arr.unshift(e1, e2, en); arr.reverse(); arr.slice(start, end); arr.splice(index, count, e1, e2, en); arr.indexOf(el); arr.includes(el); // ES6
對象:
object.hasOwnProperty(prop); object.propertyIsEnumerable(prop); object.valueOf(); object.toString(); object.toLocaleString(); Class.prototype.isPropertyOf(object);
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/95472.html
摘要:獲取的對象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對象即使沒有代碼,也會把默認的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據(jù)我測試不同環(huán)境結(jié)果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點個贊,點個star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項目地址 https:...
摘要:最近遇到的前端面試題更新版前端掘金個人博客已上線,歡迎前去訪問評論無媛無故的個人博客以下內(nèi)容非本人原創(chuàng),是整理后覺得更容易理解的版本,歡迎補充。 一道面試題引發(fā)的對 javascript 類型轉(zhuǎn)換的思考 - 前端 - 掘金 最近群里有人發(fā)了下面這題:實現(xiàn)一個函數(shù),運算結(jié)果可以滿足如下預(yù)期結(jié)果: ... 收集 JavaScript 各種疑難雜癥的問題集錦 - 前端 - 掘金 從原博客遷移...
摘要:最近遇到的前端面試題更新版前端掘金個人博客已上線,歡迎前去訪問評論無媛無故的個人博客以下內(nèi)容非本人原創(chuàng),是整理后覺得更容易理解的版本,歡迎補充。 一道面試題引發(fā)的對 javascript 類型轉(zhuǎn)換的思考 - 前端 - 掘金 最近群里有人發(fā)了下面這題:實現(xiàn)一個函數(shù),運算結(jié)果可以滿足如下預(yù)期結(jié)果: ... 收集 JavaScript 各種疑難雜癥的問題集錦 - 前端 - 掘金 從原博客遷移...
摘要:最近遇到的前端面試題更新版前端掘金個人博客已上線,歡迎前去訪問評論無媛無故的個人博客以下內(nèi)容非本人原創(chuàng),是整理后覺得更容易理解的版本,歡迎補充。 一道面試題引發(fā)的對 javascript 類型轉(zhuǎn)換的思考 - 前端 - 掘金最近群里有人發(fā)了下面這題:實現(xiàn)一個函數(shù),運算結(jié)果可以滿足如下預(yù)期結(jié)果: ... 收集 JavaScript 各種疑難雜癥的問題集錦 - 前端 - 掘金從原博客遷移過來...
摘要:今天同學去面試,做了兩道面試題全部做錯了,發(fā)過來給道典型的面試題前端掘金在界中,開發(fā)人員的需求量一直居高不下。 排序算法 -- JavaScript 標準參考教程(alpha) - 前端 - 掘金來自《JavaScript 標準參考教程(alpha)》,by 阮一峰 目錄 冒泡排序 簡介 算法實現(xiàn) 選擇排序 簡介 算法實現(xiàn) ... 圖例詳解那道 setTimeout 與循環(huán)閉包的經(jīng)典面...
平日學習接觸過的網(wǎng)站積累,以每月的形式發(fā)布。2017年以前看這個網(wǎng)址:http://www.kancloud.cn/jsfron... 03月份前端資源分享 1. Javascript 175453545 Redux compose and middleware 源碼分析 深入 Promise(二)——進擊的 Promise Effective JavaScript leeheys blog -...
閱讀 1734·2021-11-12 10:36
閱讀 1641·2021-11-12 10:36
閱讀 3469·2021-11-02 14:46
閱讀 3857·2019-08-30 15:56
閱讀 3645·2019-08-30 15:55
閱讀 1495·2019-08-30 15:44
閱讀 1077·2019-08-30 14:00
閱讀 2758·2019-08-29 18:41