成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

面試總結(jié)JavaScript篇

Jensen / 2181人閱讀

摘要:對象當(dāng)調(diào)用某種方法或查找某種屬性時,首先會在自身調(diào)用和查找,如果自身并沒有該屬性或方法,則會去它的屬性中調(diào)用查找,也就是它構(gòu)造函數(shù)的中調(diào)用查找,如果構(gòu)造函數(shù)中也沒有該屬性方法,則會去構(gòu)造函數(shù)的隱式原型中查找,一直到,就這樣形成原型鏈。

此文主旨是記錄面試中遇到的面試題,包括js中常見,易錯,重要知識點
window.onload和$(document).ready()的區(qū)別
window.onload是在頁面中包含圖片在內(nèi)的所有元素全部加載完成再執(zhí)行;
$(document).ready()是DOM樹加載完成之后執(zhí)行,不包含圖片,其他媒體文件;
因此$(document).ready()快于window.onload執(zhí)行;
數(shù)組去重
const arr = ["a","bb","22","a","yuci","haha","22"]; 

1.es6數(shù)據(jù)結(jié)構(gòu)Set

let unique = new Set(arr);  
console.log(Array.from(unique)); 

2.使用push()

let arr2 = [];  
for(let i = 0; i < arr.length; i++) {  
    if(arr2.indexOf(arr[i]) == -1) { //不包含某個值則返回-1  
        arr2.push(arr[i]);  
    }  
}  
console.log(arr2); 
//如果當(dāng)前數(shù)組的第i項在當(dāng)前數(shù)組中第一次出現(xiàn)的位置不是i,那么表示第i項是重復(fù)的,忽略掉。否則存入結(jié)果數(shù)組  
let arr3 = [arr[0]];  
for(let i = 1; i < arr.length; i++) {  
    if(arr.indexOf(arr[i]) == i) {  
        arr3.push(arr[i]);  
    }  
}  
console.log(arr3);  

3.排序去除相鄰重復(fù)元素

let arrSort = arr.sort();  
let arr4 = [];  
for(let i = 0; i< arrSort.length; i++) {  
    if(arrSort[i] != arrSort[i+1]) {  
        arr4.push(arrSort[i]);  
    }  
}  
console.log(arr4);  

4.使用splice()

let len = arr.length;  
for(let i = 0; i < len; i++) {  
    for(let j = i + 1; j < len; j++) {  
        if(arr[i] === arr[j]) {  
            arr.splice(i,1);  
            len--;  
            j--;  
        }  
    }  
}  
console.log(arr); 
事件委托

得益于事件冒泡,當(dāng)多個元素有相同的事件,將事件綁定在父元素

var oUl = document.getElementById("oul");  
oUl.addEventListener("click", function(e) {  
    var e = e||window.event;  
    var tar = e.target;  
    if(tar.nodeName === "LI") {  
        alert(tar.innerHTML);  
    }  
}) 

更詳細(xì)請看:事件委托

判斷變量類型

typeof()用于判斷簡單數(shù)據(jù);

判斷一個變量是對象還是數(shù)組使用instanceof,constructor或Object.prototype.toString.call();

更詳細(xì)請看:判斷數(shù)據(jù)類型

同步和異步(簡要闡述)
同步:由于js單線程,同步任務(wù)都在主線程上排隊執(zhí)行,前面任務(wù)沒執(zhí)行完成,后面的任務(wù)會一直等待;

異步:不進(jìn)入主線程,進(jìn)入任務(wù)隊列,等待主線程任務(wù)執(zhí)行完成,開始執(zhí)行。最基礎(chǔ)的異步操作setTimeout和setInterval,等待主線程任務(wù)執(zhí)行完,在開始執(zhí)行里面的函數(shù);

更詳細(xì)請看:js運行機(jī)制

返回false的幾種情況

false,null,0,“”,undefined,NaN

js類型值的區(qū)別
存儲地:

簡單數(shù)據(jù)類型:存儲在棧中;

引用數(shù)據(jù)類型:存儲在堆中,在棧中存儲了指針,指向存儲在堆中的地址,解釋器會先檢索在棧中的地址,從堆中獲得實體;

大小:

簡單數(shù)據(jù)類型:大小固定,占用空間小,頻繁使用,所以存儲在棧中;

引用數(shù)據(jù)類型:大小不固定,占用空間大;
閉包
何為閉包:有權(quán)訪問另一個作用域中變量的函數(shù)

閉包特性:可實現(xiàn)函數(shù)外訪問函數(shù)內(nèi)變量,外層變量可以不被垃圾回收機(jī)制回收

為什么?怎么解決?

for(var i = 0; i < 10; i++) {  
    setTimeout(function() {  
        console.log(i);    
    }, 1000);  
}  

輸出結(jié)果都為10,因為for()循環(huán)過程中每次傳值,匿名函數(shù)并沒有執(zhí)行,相當(dāng)于執(zhí)行10次function(){console.log(i);},循環(huán)結(jié)束i變?yōu)?0,所以輸出全部為10;

使用閉包,自執(zhí)行匿名函數(shù)包裹:

for(var i = 0; i < 10; i++) {  
    (function(j) {  
        setTimeout(function() {  
            console.log(j);    
        }, 1000);  
    })(i);  
} 

外部匿名函數(shù)立即執(zhí)行,把 i 作為參數(shù),賦值給 j ,因為是立即執(zhí)行,所以每次循環(huán)輸出不同值。

引用外層變量不被回收,會相比其他函數(shù)占用更高內(nèi)存,使用不當(dāng)容易造成內(nèi)存泄漏。

this的指向
全局范圍:指向window(嚴(yán)格模式下不存在全局變量,指向undefined);

普通函數(shù)調(diào)用:指向window;

對象方法調(diào)用:指向最后調(diào)用它的對象;

構(gòu)造函數(shù)調(diào)用:指向new出來的對象;

顯示設(shè)置this:call,apply方法顯示將this指向第一個參數(shù)指明的對象
new具體做了些什么
創(chuàng)建一個新對象foo;

并將它的__proto__指向其構(gòu)造函數(shù)的prototype,foo.__proto__ = Foo.prototype;

動態(tài)將this指向新對象,F(xiàn)oo.apply(foo,arguments);

執(zhí)行函數(shù)體中的代碼;

放回新對象foo;
原型和原型鏈

創(chuàng)建一個函數(shù)就會為其創(chuàng)建一個prototype屬性,指向這個函數(shù)的原型對象,原型對象會自動獲得constructor屬性,指向prototype屬性所在函數(shù)。

Function.prototype.a = "a";    
Object.prototype.b = "b";    
function Person(){}    
console.log(Person);    //function Person()    
let p = new Person();    
console.log(p);         //Person {} 對象    
console.log(p.a);       //undefined    
console.log(p.b);       //b 
p.__proto__ === Person.prototype;Person.prototype.constructor === Person

當(dāng)調(diào)用某種方法或查找某種屬性時,首先會在自身調(diào)用和查找,如果自身并沒有該屬性或方法,則會去它的__proto__屬性中調(diào)用查找,也就是它構(gòu)造函數(shù)的prototype中調(diào)用查找,如果構(gòu)造函數(shù)中也沒有該屬性方法,則會去構(gòu)造函數(shù)的隱式原型中查找,一直到null,就這樣形成原型鏈。

更多有關(guān)原型請看:原型和原型鏈

繼承方式

原型鏈繼承:

Child()的原型作為Parent()的實例來繼承Parent()的方法屬性

因為所有實例都繼承原型方法屬性,其中一個實例對原型屬性值更改后,所有實例調(diào)用該屬性的值全部更改

function Parent() {}  
Parent.prototype.parentSay = function() {  
    return "i am parent";  
}  
function Child() {}  
Child.prototype.childSay = function() {  
    return "i am child";  
}  
Child.prototype = new Parent();  
var par = new Parent();  
var kid = new Child();  
  
console.log(kid.parentSay());           //i am parent 

構(gòu)造函數(shù)繼承:

在子類的構(gòu)造函數(shù)內(nèi)部通過call或apply來調(diào)用父類構(gòu)造函數(shù)

無法實現(xiàn)函數(shù)的復(fù)用

function People() {  
    this.name = ["zhangsan","lisi","wangwu"];  
}  
function Person() {  
    People.call(this);  
}  
var per1 = new Person();  
per1.name.push("zhanliu");  
console.log(per1.name);     //["zhangsan", "lisi", "wangwu", "zhanliu"]  
  
var per2 = new Person();  
console.log(per2.name);     //["zhangsan", "lisi", "wangwu"]  

組合繼承:

將原型鏈繼承和構(gòu)造函數(shù)繼承結(jié)合,最常用的繼承模式

原型鏈繼承共享的屬性和方法,構(gòu)造函數(shù)繼承實例屬性

function People(num) {  
    this.num = num;  
    this.name = ["zhangsan","lisi","wangwu"];  
}  
People.prototype.numCount = function() {  
    console.log(this.num);  
}  
function Person(num) {  
    People.call(this, num);  
}  
//繼承方式  
Person.prototype = new People();  
Person.prototype.constructor = Person;  
  
var per1 = new Person(10);  
per1.name.push("zhaoliu");  
console.log(per1.name);     //["zhangsan", "lisi", "wangwu", "zhanliu"]  
per1.numCount();            //10  
  
var per2 = new Person(20);  
console.log(per2.name);     //["zhangsan", "lisi", "wangwu"]  
per2.numCount();            //20  

更多繼承方式請看:繼承方式

數(shù)組常用方法

改變原數(shù)組:

尾部刪除pop(),尾部添加push(),頭部刪除shift(),頭部添加unshift(),排序sort(),顛倒數(shù)組元素reverse(),刪除或插入元素splice();

不會改變元素組:

合并數(shù)組concat(),拼接數(shù)組元素join(),截取元素slice(),indexOf(),lastIndexOf(),toString()

更詳細(xì)數(shù)組方法總結(jié)請看:Array數(shù)組方法總結(jié)

數(shù)據(jù)存儲
Cookie:用于客戶端與服務(wù)端通信,也具有本地存儲的功能

localStorage,sessionStorage:專門用于存儲

區(qū)別:

大小:Cookie容量為4K,因為用于客戶端與服務(wù)端通信,所有http都攜帶,如果太大會降低效率; localStorage,sessionStorage大小為5M。

失效時間:Cookie會在瀏覽器關(guān)閉時刪除,除非主動設(shè)置刪除時間;localStorage一直都在直到用戶主動刪除或清除瀏覽器緩存;sessionStorage在瀏覽器關(guān)閉時刪除。

結(jié)束語:

如有錯誤,歡迎指正

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/94170.html

相關(guān)文章

  • 前端最強(qiáng)面經(jīng)匯總

    摘要:獲取的對象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對象即使沒有代碼,也會把默認(rèn)的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據(jù)我測試不同環(huán)境結(jié)果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點個贊,點個star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項目地址 https:...

    wangjuntytl 評論0 收藏0
  • 前端資源系列(4)-前端學(xué)習(xí)資源分享&前端面試資源匯總

    摘要:特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對前端學(xué)習(xí)資源做一個匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會及時更新,平時業(yè)務(wù)工作時也會不定期更...

    princekin 評論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計模式力薦深度好文深入理解大設(shè)計模式收集各種疑難雜癥的問題集錦關(guān)于,工作和學(xué)習(xí)過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實現(xiàn)方式 延遲加載也稱為惰性加載,即在長網(wǎng)頁中延遲加載圖像。用戶滾動到它們之前,視口外的圖像不會加載。本文詳細(xì)介紹了三種延遲加載的實現(xiàn)方式。 詳解 Javascript十大常用設(shè)計模式 力薦~ ...

    caikeal 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    muddyway 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<