![前端程序員面試分類真題13_第1頁(yè)](http://file4.renrendoc.com/view5/M01/2F/25/wKhkGGZb9EqAaJKAAAJWs1gBmck257.jpg)
![前端程序員面試分類真題13_第2頁(yè)](http://file4.renrendoc.com/view5/M01/2F/25/wKhkGGZb9EqAaJKAAAJWs1gBmck2572.jpg)
![前端程序員面試分類真題13_第3頁(yè)](http://file4.renrendoc.com/view5/M01/2F/25/wKhkGGZb9EqAaJKAAAJWs1gBmck2573.jpg)
![前端程序員面試分類真題13_第4頁(yè)](http://file4.renrendoc.com/view5/M01/2F/25/wKhkGGZb9EqAaJKAAAJWs1gBmck2574.jpg)
![前端程序員面試分類真題13_第5頁(yè)](http://file4.renrendoc.com/view5/M01/2F/25/wKhkGGZb9EqAaJKAAAJWs1gBmck2575.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
前端程序員面試分類真題13簡(jiǎn)答題1.
請(qǐng)用多種方式獲取當(dāng)前時(shí)間的毫秒數(shù)。正確答案:有4種方式獲取當(dāng)前毫秒數(shù)。其中3種方式要先創(chuàng)建Date對(duì)象,然后再使用一元加法運(yùn)算符、getTime()或valu(江南博哥)eOf()才能得到當(dāng)前毫秒數(shù),另一種是用Date對(duì)象的靜態(tài)方法now()獲取當(dāng)前時(shí)間的毫秒數(shù),具體代碼如下所示。
vardate=newDate();
+date;
date.getTime();
date.valueOf();
Date.now();[考點(diǎn)]日期和正則表達(dá)式
2.
在網(wǎng)頁(yè)中實(shí)現(xiàn)倒計(jì)時(shí),能夠動(dòng)態(tài)顯示“××天××?xí)r××分××秒”。正確答案:先將兩個(gè)日期對(duì)象相減,得到時(shí)間間隔的毫秒數(shù);再將毫秒數(shù)換算成天、時(shí)、分和秒:然后把得到的結(jié)果賦給文檔中的一個(gè)元素,作為它的內(nèi)容顯示;最后用定時(shí)器循環(huán)執(zhí)行前面的兩步,就能實(shí)現(xiàn)倒計(jì)時(shí),具體如下所示。
<divid="date"></div>
<script>
varend=newDate("2020-3-1200:00");
//截止日期
functioncountdown(){
varnow=newDate();
varday,hour,minute,second,str,
remainder=end-now;
if(remainder<0){
return;
}
day=Math.floor(remainder/1000/60/60/24);
//天數(shù)
hour=Math.floor(remainder/1000/60/60%24);
//小時(shí)
minute=Math.floor(remainder/1000/60%60);
//分鐘
second=Math.floor(remainder/1000%60);
//秒數(shù)
str=day+"天"+hour+"時(shí)"+minute+"分"+second+"秒";
document.getElementById("date").innerHTML=str;
setTimeout(countdown,1000);
}
countdown();
</script>[考點(diǎn)]日期和正則表達(dá)式
3.
如何判斷某一年是閏年?正確答案:因?yàn)殚c年的二月份有29天,所以只要獲得這一年二月份的天數(shù)就能判斷是否是閏年。在構(gòu)造函數(shù)Date()中,把月份設(shè)為3月,也就是2,天數(shù)設(shè)為0,就能得到上個(gè)月的最后一天,代碼如下所示。
functionisLeapYear(year){
returnnewDate(year,2,0).getDate()==29;
}[考點(diǎn)]日期和正則表達(dá)式
4.
如何計(jì)算兩個(gè)日期相隔的天數(shù)?正確答案:兩個(gè)Date對(duì)象相減可以得到日期之間的毫秒數(shù),算出毫秒后,再換算成天,1天有24小時(shí),1小時(shí)有60分鐘,1分鐘有60秒,1秒有1000毫秒,代碼如下所示。
functiondateInterval(start,end){
vardiff=Math.abs(start-end),
//取絕對(duì)值
days=Math.ceil(diff/1000/60/60/24);
//向上取整
returndays;
}[考點(diǎn)]日期和正則表達(dá)式
5.
請(qǐng)編寫一個(gè)格式化字符串的函數(shù),例如傳入“我的名字叫{0}”和“strick”,返回“我的名字叫strick”。正確答案:這個(gè)格式化字符串的函數(shù)包含2個(gè)參數(shù),第一個(gè)參數(shù)是需要格式化的字符串,第二個(gè)參數(shù)是一個(gè)數(shù)組,數(shù)組的元素可替換對(duì)應(yīng)的占位符。由于構(gòu)造函數(shù)RegExp()能動(dòng)態(tài)創(chuàng)建正則表達(dá)式,因此可方便地實(shí)現(xiàn)替換邏輯,具體如下所示。
functionstrFormat(format,args){
if(arguments.length<2){
returnformat;
}
for(varkeyinargs){
varvalue=args[key];
if(undefined!=value){
format=format.replace(newRegExp("\\{"+key+"\\}","gm"),value);
}
}
returnformat;
}[考點(diǎn)]日期和正則表達(dá)式
6.
用JavaScript封裝一個(gè)函數(shù),可實(shí)現(xiàn)整數(shù)的千分位逗號(hào)分隔符(不用考慮小數(shù)),例如12345用12,345表示。正確答案:先將整數(shù)轉(zhuǎn)換為字符串,再用replace()方法為其添加千分位逗號(hào)分隔符,具體如下所示。
functionthousandBitSeparator(num){
returnnum.toString().replace(/(\d)(?=(\d{3})+$)/g,function(match){
returnmatch+",";
});
}
在上面的代碼中,正則表達(dá)式首先捕獲一個(gè)數(shù)字,再用零寬正向先行斷言(?=)自定義匹配條件,匹配的條件是當(dāng)前數(shù)字之后的數(shù)字個(gè)數(shù)是3的倍數(shù)。注意,正則表達(dá)式中的元字符“$”不能省略,并且零寬斷言中匹配到的內(nèi)容不會(huì)被捕獲。[考點(diǎn)]日期和正則表達(dá)式
7.
編寫一個(gè)函數(shù),用于清除字符串前后的空格。正確答案:使用String對(duì)象的replace()方法,再借助正則表達(dá)式來(lái)去除字符串前后的空格,代碼如下所示。
functiontrim(str){
returnstr.replace(/^\s+|\s+$/g,"");
}
在上面的正則表達(dá)式中,元字符“^”匹配行的開始,元字符“$”匹配行的結(jié)束;字符類“\s”表示空格;豎線(|)表示子表達(dá)式之間“或”的關(guān)系;標(biāo)志字符串“g”表示全局模式匹配,可找到文本中的所有匹配,而不是只匹配第一個(gè)。[考點(diǎn)]日期和正則表達(dá)式
8.
如何將字符串“get-element-by-id”轉(zhuǎn)化成駝峰表示法的“getElementById”?正確答案:可以使用String對(duì)象中的replace()方法執(zhí)行字符替換,replace()的第二個(gè)參數(shù)可以定義為一個(gè)回調(diào)函數(shù),該函數(shù)的參數(shù)如下表所列?;卣{(diào)函數(shù)的參數(shù)參數(shù)描述match匹配的文本p1、p2...pn分組中匹配的文本,即捕獲的文本,p1表示第一個(gè)index匹配的文本在原字符串中的索引input被檢索的字符串
下面利用這個(gè)回調(diào)函數(shù),在函數(shù)中將連接符和字符的組合(如“-e”、“-b”等)替換為一個(gè)大寫字符(如“E”、“B”等),如下所示。
varstr="get-element-by-id";
str.replace(/-([a-z])/g,function(match,p1,index,input){
returnp1.toUpperCase();
});[考點(diǎn)]日期和正則表達(dá)式
9.
用數(shù)組方法把下面數(shù)組中的元素加起來(lái),并把得到的和賦給result變量。
vararr=[1,2,3,4,5],result;正確答案:可以使用縮減數(shù)組的reduce()方法,這個(gè)方法會(huì)將數(shù)組計(jì)算成一個(gè)值。此方法接收兩個(gè)參數(shù),第一個(gè)參數(shù)是回調(diào)函數(shù),第二個(gè)參數(shù)是初始值(可選),如果沒有設(shè)置,那么默認(rèn)會(huì)將數(shù)組中的第一個(gè)元素作為初始值?;卣{(diào)函數(shù)有4個(gè)參數(shù):累積值、當(dāng)前元素、當(dāng)前元素的索引和原始數(shù)組。具體實(shí)現(xiàn)如以下代碼所示。
result=arr.reduce(function(accumulator,current,index,array){
returnaccumulator+current;
});[考點(diǎn)]數(shù)組
10.
不用循環(huán)語(yǔ)句(for、while等)來(lái)創(chuàng)建一個(gè)長(zhǎng)度為50的數(shù)組,每個(gè)元素的值等于它的索引。正確答案:先聲明一個(gè)長(zhǎng)度為51的空數(shù)組,然后用1把數(shù)組銜接為字符串,再將字符串分割為數(shù)組,數(shù)組中每個(gè)元素的值都為字符串“1”,最后用數(shù)組的map()方法迭代每個(gè)元素,把元素的值改為它的索引,如下所示。
Array(51).join("1").split("").map(function(value,index){
returnindex;
});[考點(diǎn)]數(shù)組
11.
設(shè)計(jì)一個(gè)函數(shù)來(lái)補(bǔ)全整數(shù)的前置0,例如為3補(bǔ)全兩個(gè)前置0,得到的結(jié)果為“003”。正確答案:設(shè)計(jì)的函數(shù)有兩個(gè)參數(shù),第一個(gè)參數(shù)是待補(bǔ)全的整數(shù),第二個(gè)參數(shù)是指定的位數(shù),例如補(bǔ)全4位的整數(shù),如果傳入1,那么返回“0001”;如果傳入123,那么返回“0123”。在函數(shù)中,首先創(chuàng)建一個(gè)指定長(zhǎng)度的空數(shù)組,然后將空數(shù)組用“0”合并,接著和傳入的整數(shù)拼接,最后調(diào)用String對(duì)象的slice()方法,并傳入一個(gè)負(fù)數(shù),用于去除多余的零,具體代碼如下所示。
functionprefixZero(integer,digit){
return(newArray(digit).join("0")+integer),slice(-digit);
}[考點(diǎn)]數(shù)組
12.
有一個(gè)數(shù)組,其值為[1,[2,[3,4,2],2],5,[6]],如何才能輸出[1,2,3,4,2,2,5,6]?正確答案:利用數(shù)組的toString()方法可將數(shù)組轉(zhuǎn)換為用逗號(hào)銜接的字符串,再用split()方法把字符串用逗號(hào)分隔成數(shù)組,最后用map()方法把新數(shù)組內(nèi)的每個(gè)元素轉(zhuǎn)換成數(shù)字,具體實(shí)現(xiàn)如下所示。
vararr=[1,[2,[3,4,2],2],5,[6]];
varresult=arr.toString().split(",")
.map(function(value,index,array){
return+value;
});[考點(diǎn)]數(shù)組
13.
split()方法與join()方法有哪些區(qū)別?正確答案:首先,兩者所屬的對(duì)象不同,split()方法屬于String和RegExp對(duì)象,而join()方法屬于Array對(duì)象;其次,兩者的功能不同,split()方法能將字符串分割為數(shù)組,join()方法能將數(shù)組中的元素銜接成一個(gè)字符串。[考點(diǎn)]數(shù)組
14.
用JavaScript對(duì)下面數(shù)組進(jìn)行降序排列,即根據(jù)a屬性的值從大到小排列。
vararr=[{a:3},{a:2},{a:1},{a:5},{a:4}];正確答案:可以用數(shù)組的排序方法sort()實(shí)現(xiàn),該方法能接收一個(gè)比較函數(shù)。比較函數(shù)有兩個(gè)參數(shù):x和y,也就是數(shù)組的兩個(gè)元素,根據(jù)函數(shù)的返回值,改變這兩個(gè)元素在數(shù)組中的位置,有如下3種移位規(guī)則:
(1)當(dāng)返回值大于0時(shí),x會(huì)被移到y(tǒng)的后面。
(2)當(dāng)返回值等于0時(shí),x和y的位置不改變。
(3)當(dāng)返回值小于0時(shí),x會(huì)被移到y(tǒng)的前面。
根據(jù)上面的規(guī)則,可以用下面的代碼實(shí)現(xiàn)排序。還要注意一點(diǎn),sort()方法會(huì)改變?cè)紨?shù)組,所以不用再給arr重新賦值。
arr.sort(function(x,y){
returnx.a>y.a;
});[考點(diǎn)]數(shù)組
15.
實(shí)現(xiàn)一個(gè)isArray()函數(shù),可判斷傳入的參數(shù)是否是數(shù)組。正確答案:ECMAScript5為Array對(duì)象添加了isArray()方法,專門用于檢測(cè)對(duì)象是否是數(shù)組,但并不是所有瀏覽器都支持。對(duì)于那些比較舊的瀏覽器,需要借助基礎(chǔ)對(duì)象Object的原型方法toString(),它能返回格式為“[objectType]”的字符串,其中Type是對(duì)象的類型,此方法能檢測(cè)出的對(duì)象有Number、Array、Date、RegExp等。調(diào)用toString()方法的時(shí)候也要注意,不能直接使用,必須使用函數(shù)的方法call()或apply()間接調(diào)用,因?yàn)閷?duì)象有可能重寫了此方法。具體寫法如下所示。
functionisArray(obj){
if(Array.isArray){
returnArray.isArray(obj);
}
vartoString=Ototype.toString;
returntoString.call(obj)==="[objectArray]";[考點(diǎn)]數(shù)組
16.
如何讓數(shù)組中的元素能夠隨機(jī)排序?正確答案:要打亂數(shù)組內(nèi)的元素,可以使用Fisher-Yates亂序算法,這是一種經(jīng)典的洗牌算法。在現(xiàn)實(shí)生活中,如果要洗牌,那么最隨機(jī)的做法就是從牌堆里隨便抽一張出來(lái),然后放在一邊,之后再?gòu)氖O碌呐评镏貜?fù)之前的操作,直到所有牌都被抽出來(lái)并放到了另一堆中。抽象到代碼中,思路與之類似,只是操作細(xì)節(jié)略有不同。首先隨機(jī)從數(shù)組中取出一個(gè)元素,然后把該元素插到最后面,同時(shí)把被換走的元素插到剛剛的隨機(jī)位置。一輪過后,就只需在剩下的n-1個(gè)元素中再進(jìn)行相同的操作,直至第一個(gè),如下所示。
functionshuffle(arr){
varlength=arr.length,
temp,index;
for(vari=length-1;i>=0;i--){
index=Math.floor(Math.random()*i);//向下取整
temp=arr[index];
//取出隨機(jī)元素
arr[index]=arr[i];
//將最后面的元素放到上步隨機(jī)元素的位置
arr[i]=temp;
//將隨機(jī)元素插到最后面
}
returnarr;
}[考點(diǎn)]數(shù)組
17.
下面是一個(gè)有序的數(shù)組,接下來(lái)用二分查找搜索某個(gè)值,判斷它是否在數(shù)組中。
vararr=[1,2,3,4,5,6];正確答案:二分查找的前置條件是數(shù)組要有序,因?yàn)榇颂幰褲M足這個(gè)條件,所以可以省去排序的操作。二分查找是將搜索值與中間位置的元素進(jìn)行比較,然后以這個(gè)元素為分界點(diǎn),把數(shù)組分成左右兩部分。如果和當(dāng)前中間位置的元素匹配,那么就結(jié)束查找,否則繼續(xù)和左邊或右邊部分中間位置的元素進(jìn)行比較,再把這部分子數(shù)組分成兩半。就這樣反復(fù)比較,反復(fù)縮小范圍,直至結(jié)束。具體的寫法如下所示。
functionbinarySearch(target,arr){
varstart=0,
//起始位置
end=arr.length-1,
//結(jié)束位置
middle,
element;
while(start<=end){
middle=Math.floor((start+end)/2);
//向下取整
element=arr[middle];
//中間位置的元素
if(target==element)
//目標(biāo)元素匹配成功
returnmiddle;
elseif(target>element)
//在右邊部分查找
start=middle+1;
else
//在左邊部分查找
end=middle-1;
}
return-1;
}[考點(diǎn)]數(shù)組
18.
下面是一個(gè)帶重復(fù)元素的數(shù)組,請(qǐng)將重復(fù)的元素只保留一個(gè),多余的全部刪除。
vararr=[1,5,4,5,2,6,6,"1"];正確答案:可以用一種空間換時(shí)間的方法。先創(chuàng)建一個(gè)空對(duì)象和空數(shù)組,然后遍歷帶重復(fù)元素的數(shù)組,把此數(shù)組的元素存為對(duì)象的屬性,并判斷對(duì)象是否已包含此屬性。如果未包含,那么把當(dāng)前元素插入到空數(shù)組中,否則跳過,具體如下所示。
functiondistinct(arr){
varobj={},
//空對(duì)象
result=[],
//空數(shù)組
length=arr.length;
arr.forEach(function(value,index){
if(!obj[value]){
obj[value]=true;
result.push(value);
}
});
returnresult;
}
在上面代碼的if條件語(yǔ)句中,判斷依據(jù)是對(duì)象是否包含指定的屬性,當(dāng)引用對(duì)象沒有屬性時(shí),得到的值是undefined,執(zhí)行邏輯非返回的結(jié)果是true。除此以外,還要注意一點(diǎn),上面是通過方括號(hào)來(lái)讀取和寫入屬性的值,而方括號(hào)內(nèi)必須是一個(gè)計(jì)算結(jié)果為字符串的表達(dá)式,這就導(dǎo)致一個(gè)問題,如果傳入一個(gè)數(shù)字1和一個(gè)字符串“1”,那么這兩個(gè)會(huì)被認(rèn)為是同一個(gè)值,有一個(gè)會(huì)被過濾掉。為了避免出現(xiàn)這個(gè)問題,可以在遍歷的時(shí)候再加一次判斷,如下所示。
arr.forEach(function(value,index){
if(!obj[valuel){
obj[value]=true;
result.push(value);
}elseif(result.indexOf(value)==-1){
result.push(value);
}
});[考點(diǎn)]數(shù)組
19.
找出下面數(shù)組
溫馨提示
- 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生交流會(huì)策劃方案(8篇)
- 2025年材料用過濾袋合同采購(gòu)流程
- 2025年醫(yī)用耗材集中采購(gòu)協(xié)議
- 2025年文物遺址保護(hù)服務(wù)項(xiàng)目規(guī)劃申請(qǐng)報(bào)告
- 2025年舞蹈學(xué)校教職員工勞動(dòng)合同
- 2025年貴金屬靶材項(xiàng)目申請(qǐng)報(bào)告模板
- 2025年企業(yè)互助共享協(xié)議
- 2025年單位二手商業(yè)房產(chǎn)出售合同范本
- 2025年公司員工競(jìng)業(yè)限制協(xié)議范例
- 2025年組合開關(guān)項(xiàng)目提案報(bào)告
- 2025年廣東省春季高考英語(yǔ)情景交際題專項(xiàng)練習(xí)(含答案)
- 浙江省湖州是吳興區(qū)2024年中考語(yǔ)文二模試卷附參考答案
- 風(fēng)電設(shè)備安裝施工專項(xiàng)安全措施
- IQC培訓(xùn)課件教學(xué)課件
- 智能 檢測(cè)與監(jiān)測(cè) 技術(shù)-智能建造技術(shù)專01課件講解
- 關(guān)于成立合同審核小組的通知
- 2024年上海市中考英語(yǔ)試題和答案
- 教育部《中小學(xué)校園食品安全和膳食經(jīng)費(fèi)管理工作指引》知識(shí)培訓(xùn)
- 征地拆遷項(xiàng)目社會(huì)穩(wěn)定風(fēng)險(xiǎn)評(píng)價(jià)報(bào)告
- 長(zhǎng)沙醫(yī)學(xué)院《無(wú)機(jī)化學(xué)》2021-2022學(xué)年第一學(xué)期期末試卷
- eras婦科腫瘤圍手術(shù)期管理指南解讀
評(píng)論
0/150
提交評(píng)論