前端面試--js程式碼片段(基礎中的基礎,持續更新中)
阿新 • • 發佈:2018-12-25
程式碼片段1:
var arr1 = [1,2,3,4,5]
var arr2 = []
for(var i = 0; i < arr1.length; i ++) {
arr2.push(function(){
alert(i)
})
}
arr2[0]()
此程式碼在呼叫arr20方法以後,輸出都是5;
執行的順序是:for迴圈遍歷i為01234;然後呼叫了5次function函式,但是並沒有執行。只在最後的arr20呼叫,所以,無論[Num]寫的幾,alert都是5。
程式碼片段2
var x = 3; var foo = { x: 2, baz: { bar: function() { return this.x } } } Object.prototype.x = 20 var go = foo.baz.bar // 函式體 console.log(go()) // 3 console.log(foo.baz.bar()) // undefined
本題考查的是對this指向的理解,與實際運用。
第一個log是把包含this的函式體賦值給了變數go,該變數前無引用,所有預設指向window,故為3;
第二個log,把包含this的函式體指向了foo.baz;但是該部分沒有x值,故為undefined。
程式碼片段3:
請寫出一段去除空白字元的原型方法:
String.prototype.trim = function(){ // return this.replace(/\s/g, ""); return this.split(" ").join("") } console.log('a a bc de f'.trim())
這種題也是面試常見題 ,大家要加油!
程式碼片段4:
var a = 1
function test(){
a=3
return
function a(){
}
}
test();
console.log(a, '--a--')//1
這裡的function a() {} 等於 var a = function(){} , 用var宣告a,相當於把函式體內部的a私有化了,所以,log的時候,a為1.
程式碼片段5
排序題也會必考的哦!請根據傳入的引數n( ) 對一堆陣列(純數字)按照距離n最近的順序排列(距離即使數字與n的 差值的絕對值)
var arr = [7, 28, -1, 0, 11, 33]
var sortNum=[]
function sort(n){
for(let i = 0; i<arr.length; i++){
for(let j = i+1; j<arr.length; j++){
if(Math.abs(arr[i] - n) > Math.abs(arr[j] - n)){
console.log(123)
let _temporary = arr[i]
arr[i] = arr[j]
arr[j] = _temporary
}
}
}
console.log(arr, '--排序以後---')
}
sort(8)
程式碼片段 6
關於正則的一些補充
var str = ' 1中 國我愛你123abc~ . '
var test = (/^1$/g).test('1') //正則.test(字串);返回true或者false
var test1 = str.search(/\d/)//查詢第一個數字的下標
var test2 = str.match('他')//找到返回下標,未找到返回null
var test3 = str.replace(/\s/g, '*')//替換,把所有的空白字元替換成*
console.log(test2, '--str--')
/d --所有數字
/D --除了數字以外
/s -- 空格
/w -- 字母?
/W -- 除了字母
g -- 全域性查詢
i -- 不去分大小寫
程式碼片段 7
//陣列去重
var arr = [1,2,2,3,3,4,5]
arr1=[]
for(let i = 0; i < arr.length; i ++) {
if(arr1.indexOf(arr[i]) < 0) {
arr1.push(arr[i])
}
}
console.log(arr1)
--或 --
利用set自帶去重屬性
console.log([...new Set(arr)])
程式碼片段 8
統計字串中,字母次數
var str = 'aaabbcqweqweqwe'
obj = {}
for(var i =0; i<str.length; i ++ ) {
var v = str.charAt(i)
if( obj[v] == undefined ){ //遍歷物件中當前鍵是否存在
obj[v] = {}
obj[v].count = 1;
obj[v].value = v;
}else {
obj[v].count = ++ obj[v].count
}
}
for(key in obj){
document.write(obj[key].value +'='+obj[key].count+' '); // a=4 b=3 c=4 d=2 f=1 g=1 h=1
}