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