前端

* __proto__和prototype

每個(gè)對(duì)象都有__proto__,但只有函數(shù)有prototype。當(dāng)你創(chuàng)建函數(shù)時(shí),JS會(huì)為這個(gè)函數(shù)自動(dòng)添加prototype屬性,函數(shù)的prototype中是一個(gè)構(gòu)造函數(shù)constructor,constructor指向函數(shù)的申明

function test() {}

var t = test;

則t.prototype中有constructor構(gòu)造方法,且constructor = function test()

對(duì)象的__proto__指向自己構(gòu)造函數(shù)的prototype。obj.__proto__.__proto__...的原型鏈由此產(chǎn)生,包括我們的操作符instanceof正是通過(guò)探測(cè)obj.__proto__.__proto__... === Constructor.prototype來(lái)驗(yàn)證obj是否是Constructor的實(shí)例。

參考:從__proto__和prototype來(lái)深入理解JS對(duì)象和原型鏈

* typeof運(yùn)算符和instanceof運(yùn)算符以及isPrototypeOf()方法的區(qū)別

* call()和apply()的區(qū)別

apply()的妙用:

Array.prototype.push(arr1, arr2):數(shù)組arr1和arr2合并

Math.max.apply(null,array):找出數(shù)組array中的最大值

參考:apply()與call()的區(qū)別

* 描述以下變量的區(qū)別:null,undefined或undeclared

* ==和===有什么區(qū)別?

規(guī)定:

1、null ==??undefined 為true

2、==操作符任意一邊有NaN,則返回false

3、!=操作符任意一邊有NaN,則返回true

比較時(shí)類(lèi)型轉(zhuǎn)換的先后順序圖示:

類(lèi)型轉(zhuǎn)換順序

參考:前端碎碎念 之 為什么[] == ![] ?

JS布爾值(Boolean)轉(zhuǎn)換規(guī)則

* 什么是事件冒泡?什么是事件捕獲?

* 如何從瀏覽器的URL中獲取查詢(xún)字符串參數(shù)?

function?getUrlParam(name){

? ??var reg = new RegExp('(^|&)' + name + '=([^&]*)(&|$)');

????var result = window.location.search.substr(1).match(reg);

????return result ? decodeURIComponent(result[2]) : null;

}

* 請(qǐng)解釋一下JavaScript的同源策略

瀏覽器同源策略(SOP)的同源是指兩個(gè) URL 的協(xié)議/主機(jī)名/端口一致。例如,https://www.taobao.com/pages/...,它的協(xié)議是?https,主機(jī)名是?www.taobao.com,端口是?443。

同源策略作為瀏覽器的安全基石,其「同源」判斷是比較嚴(yán)格的,相對(duì)而言,Cookie中的「同站」判斷就比較寬松:只要兩個(gè) URL 的 eTLD+1 相同即可,不需要考慮協(xié)議和端口。其中,eTLD 表示有效頂級(jí)域名,注冊(cè)于 Mozilla 維護(hù)的公共后綴列表(Public Suffix List)中,例如,.com、.co.uk、.github.io 等。eTLD+1 則表示,有效頂級(jí)域名+二級(jí)域名,例如 taobao.com 等。

舉幾個(gè)例子,www.taobao.com 和?www.baidu.com?是跨站,www.a.taobao.com 和?www.b.taobao.com?是同站,a.github.io 和 b.github.io 是跨站(注意是跨站)。

參考:瀏覽器系列之 Cookie 和 SameSite 屬性

* 通過(guò)new創(chuàng)建一個(gè)對(duì)象的時(shí)候,構(gòu)造函數(shù)內(nèi)部有哪些改變?

新建了一個(gè)對(duì)象A,將對(duì)象A的__propo__指向了構(gòu)造函數(shù)的prototype,并且將構(gòu)造函數(shù)的this指向了對(duì)象A

// 第一版代碼

function objectFactory() {

????var obj = new Object(),

????Constructor = [].shift.call(arguments); //取出第一個(gè)參數(shù),就是我們要傳入的構(gòu)造函數(shù)。此外因?yàn)?shift 會(huì)修改原數(shù)組,所以 arguments 會(huì)被去除第一個(gè)參數(shù)

????obj.__proto__ = Constructor.prototype; //將 obj 的原型指向構(gòu)造函數(shù),這樣 obj 就可以訪問(wèn)到構(gòu)造函數(shù)原型中的屬性

????Constructor.apply(obj, arguments);?//使用 apply,改變構(gòu)造函數(shù) this 的指向到新建的對(duì)象,這樣 obj 就可以訪問(wèn)到構(gòu)造函數(shù)中的屬性

????return obj;

};

參考:JavaScript深入之new的模擬實(shí)現(xiàn)

* 請(qǐng)解釋JSONP的工作原理,以及它為什么不是真正的AJAX。

* 繼承

function object(o) {

????function F() {}

????F.prototype = o;

????return new F();

}

function prototype(child, parent) {

????var prototype = object(parent.prototype); //將父類(lèi)的原型賦值給一個(gè)空構(gòu)造函數(shù)的原型,并返回構(gòu)造函數(shù)創(chuàng)建的對(duì)象

????prototype.constructor = child; //將空對(duì)象的構(gòu)造函數(shù)指向子類(lèi)

????child.prototype = prototype; //子類(lèi)的原型指向空對(duì)象

}

JavaScript深入之繼承的多種方式和優(yōu)缺點(diǎn)

* 簡(jiǎn)述javascript中this的指向

簡(jiǎn)單總結(jié)就是,如果對(duì)應(yīng)的Reference是對(duì)象,this就是指向這個(gè)對(duì)象,否則this都是指向undefined

1.計(jì)算 MemberExpression(簡(jiǎn)單理解就是()左邊部分)的結(jié)果賦值給 ref

2.判斷 ref 是不是一個(gè) Reference 類(lèi)型:

????2.1 如果 ref 是 Reference(包括undefined, an Object, a Boolean, a String, a Number, or an environment record),并且 IsPropertyReference(ref) 是 true(也就是base value是對(duì)象,base value就是指屬性所在的對(duì)象或者就是 EnvironmentRecord), 那么 this 的值為 GetBase(ref) (也就是base value的值)

????2.2 如果 ref 是 Reference,并且 base value 值是 Environment Record, 那么this的值為 ImplicitThisValue(ref)(規(guī)范規(guī)定,該函數(shù)始終返回 undefined)

????2.3 如果 ref 不是 Reference,那么 this 的值為 undefined

參考:JavaScript深入之從ECMAScript規(guī)范解讀this

*?a.x?=?a?=?{x:?2};

var?a?=?{n:?1};

var?b?=?a;

a.x?=?a?=?{x:?2};

console.log(a.x)? // 2

console.log(b.x) // { x: 2 }

參考:Javascript 面試題連等賦值 a.x = a = {n: 2}?

* let、const、var 區(qū)別:

function retA() {

????var arr = [];

????for(var i = 0; i < 10; i++) {

????????arr[i] = function() {

????????????console.log(i);

????????}

????}

????return arr;

}

var testArr = retA();

for(var j = 0; j < testArr.length; j++) {

????testArr[j]();

}

參考:let深入理解---let存在變量提升嗎?

MDN中l(wèi)et介紹?(與通過(guò) ?var?聲明的有初始化值?undefined的變量不同,通過(guò)?let?聲明的變量直到它們的定義被執(zhí)行時(shí)才初始化)

JavaScript深入之變量對(duì)象?(通過(guò)活動(dòng)變量AO理解變量的幾個(gè)階段:「創(chuàng)建create、初始化initialize 和賦值assign」)

MDN中的var?(聲明和未聲明變量之間的差異)

* Promise相關(guān)面試題

const first = () => (new Promise((resolve,reject)=>{

? ? console.log(3);

? ? let p = new Promise((resolve, reject)=>{

? ? ? ? console.log(7);

? ? ? ? setTimeout(()=>{

? ? ? ? ? console.log(5);

? ? ? ? ? resolve(6);

? ? ? ? },0)

? ? ? ? resolve(1);

? ? });

? ? resolve(2);

? ? p.then((arg)=>{

? ? ? ? console.log(arg);

? ? });

}));

first().then((arg)=>{

? ? console.log(arg);

});

console.log(4);

參考:深入理解Promise運(yùn)行原理?(手動(dòng)實(shí)現(xiàn)Promise)

這一次,徹底弄懂 JavaScript 執(zhí)行機(jī)制?(setTimeout、setInterval、Promise、宏任務(wù)、微任務(wù))

一個(gè)Promise面試題

Promise 必知必會(huì)(十道題)

*?請(qǐng)?jiān)斒瞿銓?duì)vue生命周期的理解,包括每個(gè)階段數(shù)據(jù)對(duì)象和DOM的特點(diǎn)

created之前不能訪問(wèn)data,method等屬性、方法,mounted之前不能操作DOM節(jié)點(diǎn),update是有雙向綁定的數(shù)據(jù)變化時(shí)調(diào)用


參考:vue 生命周期深入?(父子組件的生命周期)

如何解釋vue的生命周期才能令面試官滿(mǎn)意?

vue生命周期解析?(手動(dòng)實(shí)現(xiàn)生命周期方法)

* Vue原理深入理解

參考:【前端發(fā)動(dòng)機(jī)】深入 Vue 響應(yīng)式原理,從源碼分析

30 道 Vue 面試題,內(nèi)含詳細(xì)講解(涵蓋入門(mén)到精通,自測(cè) Vue 掌握程度)

深入剖析:Vue核心之虛擬DOM?(key的作用)

剖析Vue實(shí)現(xiàn)原理 - 如何實(shí)現(xiàn)雙向綁定mvvm(簡(jiǎn)化版)

*?Javascript中普通 for 循環(huán)和 forEach 的性能哪個(gè)好?為什么?

參考:JavaScript 數(shù)組遍歷方法的對(duì)比

* Vuex工作原理

參考:vuex工作原理詳解

* Vue-Router原理

URL的井號(hào)

理解vue-router中(router-link router-view $router $route)實(shí)現(xiàn)原理(手動(dòng)實(shí)現(xiàn))

*?隱式類(lèi)型轉(zhuǎn)換

JavaScript 加號(hào)運(yùn)算符詳解

* flex布局

Flex 布局教程:語(yǔ)法篇

*?Generator

* webpack基礎(chǔ)

Webpack進(jìn)階視頻

[webpack] devtool里的7種SourceMap模式是什么鬼?

webpack4 - splitChunks & runtimeChunk

JavaScript Source Map 詳解

webpack之optimization.runtimeChunk作用

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

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