面試總結(jié)1:
JavaScript
1.find和filter有何區(qū)別
find和filter都是需要回調(diào)函數(shù)的豫尽,但是區(qū)別是find返回第一個找到的結(jié)果,是一個數(shù)組項;但是filter是返回找到的所有的數(shù)據(jù)結(jié)果,并返回一個新數(shù)組唧喉。
2.數(shù)組替換([1,2,3,4] 替換為 [1,2,3,’a’, ‘b’, 4])?使用原生JavaScript方法
使用數(shù)組的splice方法
var arr = [1,2,3,4,5];
arr.splice(1,0,'a'); // [ 1, "a", 2, 3, 4, 5 ]
數(shù)組的方法
push 在數(shù)組尾部添加,返回添加后的數(shù)組元素的個數(shù)
unshift 在數(shù)組頭部添加,返回數(shù)組添加后元素的個數(shù)
shift 刪除數(shù)組的第一個元素八孝,返回被刪除的元素
pop 刪除數(shù)組的最后一個元素董朝,返回被刪除的元素
splice 刪除、插入干跛、替換 執(zhí)行的是操作子姜,改變原數(shù)組的值,不返回任何值
slice(start楼入,end) 截取數(shù)組的一部分哥捕,返回截取的數(shù)組,start為起始位置嘉熊,end為結(jié)束為止遥赚,不包括結(jié)束的位置元素
concat a.concat(b) 將兩個數(shù)組拼接在一起,返回一個拼接后的新數(shù)組阐肤,且a內(nèi)部的元素在新數(shù)組的前部
toString 將數(shù)組轉(zhuǎn)換成字符串 返回一個字符串凫佛,toLocalString 實現(xiàn)與toString方法類似,不過在IE下會出現(xiàn)兼容性問題孕惜,比如字符前后出現(xiàn)空格愧薛,數(shù)字出現(xiàn)小數(shù),導(dǎo)致length屬性變化衫画,所以盡量使用string
join(''& '') 將數(shù)組以&符號間隔轉(zhuǎn)換為字符串 返回一個字符串
split(‘’& ‘’) 將字符串以&符號位標記轉(zhuǎn)換成數(shù)組 返回一個新數(shù)組
sort(function(a,b){return a-b}) 將數(shù)組進行排序厚满,如果沒有function函數(shù),則按字符編碼排序 返回操作后的新數(shù)組
reverse() 將數(shù)組進行倒序排序碧磅,即將數(shù)組的順序顛倒 返回倒序排列后的新數(shù)組
valueOf 查看對象內(nèi)的值,可以返回字符串類型的數(shù)組遵馆,不常用
charAt(index)獲取字符串制定順序上的元素鲸郊,返回要查詢位置的元素,不能用于查詢數(shù)組元素
3.運行結(jié)果?
另,要求: 每隔一秒打出一個數(shù)字 0,1,2,3,4
for (var i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, 1000);
}
首先展示幾種答案
(1) 使用let方法
區(qū)別是for循環(huán)中的var變成了let
for (let i = 0; i < 5; i++) {
setTimeout(function () {
console.log(i);
}, 1000 * i);
}
(2) 使用方法
for (var i = 0; i < 5; i++) {
(function (i) {
setTimeout(() => {
console.log(i);
}, 1000 * i);
})(i);
}
4.let,const,var有何區(qū)別?
(1)let和const形成塊作用域货邓,但是var沒有
(2)var存在變量提升秆撮,但是let和const沒有
(3)var聲明前可用,但是let和const不能在聲明前用换况,且不能重復(fù)聲明
(4)let和const存在暫時性死區(qū)
5.為何es6會有map結(jié)構(gòu)?
map提供了 “對象:對象” 的鍵值對职辨,有別于對象的 “字符串:對象” 的結(jié)構(gòu)
6.JavaScript的繼承實現(xiàn)
7.你認為JavaScript是一個基于鏈條的語言,面向?qū)ο蟮恼Z言?
(1)面向?qū)ο蟮娜筇攸c(封裝,繼承戈二,多態(tài))立莉,但是js沒有類的概念贞盯,js中一切皆對象,可以說js是一個基于原型對象的語言,但不是面向?qū)ο蟮摹?br> (2)js語言是一個原型對象組成的樹形結(jié)構(gòu)疹启,除了頂級對象沒有原型斧散,其他對象皆有自身的原型。
8.判斷一個對象和數(shù)組
(1)constructor
var o = {
'name':'lee'
};
var a = ['reg','blue'];
a.constructor === Array // true
a.constructor === Object // false
(2)toString方法(最佳方法)
var o = {
'name':'lee'
};
var a = ['reg','blue'];
Object.prototype.toString.call(a); // "[object Array]"
Object.prototype.toString.call(o); // "[object Object]"
(3)typeof
typeof數(shù)組和對象都是object類型,不能分辨出是數(shù)組還是對象
(4)instanceof
數(shù)組也是屬于對象的一種的节值,因此數(shù)組的instanceof對對象和數(shù)組而言都是true;但是對象對數(shù)組的instanceof為false榜聂,可以利用這個判斷對象和數(shù)組
var o = {
'name':'lee'
};
var a = ['reg','blue'];
a instanceof Array; // true
a instanceof Object; // true