网页前端开发学习必备教程程序员

10道大厂最常考的前端开发笔试题

2020-07-04  本文已影响0人  WEB开发李家靖

最近更新了很多大厂也经常考的JavaScript面试题,不知道大家都练的怎么样了?

今天再来分享10道常考面试笔试题,笔试题!最好大家在理解思路的情况下,能写出伪代码,和口述!

如果觉得对你有用,不要忘了分享给你的朋友和点个在看!

1.希望获取到页面中所有的checkbox怎么做?(不使用第三方框架)

var domList = document.getElementsByTagName(‘input’)

var checkBoxList = [];

var len = domList.length;  //缓存到局部变量

while (len--) {  //使用while的效率会比for循环更高

  if (domList[len].type == ‘checkbox’) {

      checkBoxList.push(domList[len]);

  }

}

2.当一个DOM节点被点击时候,我们希望能够执行一个函数,应该怎么做?

直接在DOM里绑定事件:<div onclick=”test()”></div>

在JS里通过onclick绑定:xxx.onclick = test

通过事件添加进行绑定:addEventListener(xxx, ‘click’, test)

那么问题来了,Javascript的事件流模型都有什么?

“事件冒泡”:事件开始由最具体的元素接受,然后逐级向上传播

“事件捕捉”:事件由最不具体的节点先接收,然后逐级向下,一直到最具体的

“DOM事件流”:三个阶段:事件捕捉,目标阶段,事件冒泡

3. var numberArray = [3,6,2,4,1,5];

1) 实现对该数组的倒排,输出[5,1,4,2,6,3]

2) 实现对该数组的降序排列,输出[6,5,4,3,2,1]

var numberArray = [3,6,2,4,1,5];

numberArray.reverse(); // 5,1,4,2,6,3

numberArray.sort(function(a,b){ //6,5,4,3,2,1

return b-a;

})

4.输出今天的日期,以YYYY-MM-DD的方式,

比如今天是2020年7月1日,则输出2020-07-01

var d = new Date();

// 获取年,getFullYear()返回4位的数字

var year = d.getFullYear();

// 获取月,月份比较特殊,0是1月,11是12月

var month = d.getMonth() + 1;

// 变成两位

month = month < 10 ? '0' + month : month;

// 获取日

var day = d.getDate();

day = day < 10 ? '0' + day : day;

alert(year + '-' + month + '-' + day);

5.用js实现随机选取10--100之间的10个数字,存入一个数组,并排序。

var iArray = [];

funtion getRandom(istart, iend){

        var iChoice = iend - istart +1;

        return Math.floor(Math.random() * iChoice + istart);

}

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

        iArray.push(getRandom(10,100));

}

iArray.sort();

6. 如何消除一个数组里面重复的元素?

var arr = [1, 2, 3, 3, 4, 4, 5, 5, 6, 1, 9, 3, 25, 4];

function deRepeat() {

    var newArr = [];

    var obj = {};

    var index = 0;

    var l = arr.length;

    for (var i = 0; i < l; i++) {

        if (obj[arr[i]] == undefined) {

            obj[arr[i]] = 1;

            newArr[index++] = arr[i];

        } else if (obj[arr[i]] == 1)

            continue;

    }

    return newArr;

}

var newArr2 = deRepeat(arr);

alert(newArr2); //输出1,2,3,4,5,6,9,25

7.下面这个ul,如何点击每一列的时候alert其index?

<ul id=”test”>

    <li>这是第一条</li>

    <li>这是第二条</li>

    <li>这是第三条</li>

</ul>

// 方法一:

var lis=document.getElementById('2223').getElementsByTagName('li');

for(var i=0;i<3;i++)

{

    lis[i].index=i;

    lis[i].onclick=function(){

        alert(this.index);

    };

}

//方法二:

var lis=document.getElementById('2223').getElementsByTagName('li');

for(var i=0;i<3;i++)

{

    lis[i].index=i;

    lis[i].onclick=(function(a){

        return function() {

            alert(a);

        }

    })(i);

}

8.定义一个log方法,让它可以代理console.log的方法。

可行的方法一:

function log(msg)  {

    console.log(msg);

}

log("hello world!") // hello world!

如果要传入多个参数呢?显然上面的方法不能满足要求,所以更好的方法是:

function log() {

    console.log.apply(console, arguments);

};

9.在Javascript中什么是伪数组?如何将伪数组转化为标准数组?

答案:

伪数组(类数组):无法直接调用数组方法或期望length属性有什么特殊的行为,但仍可以对真正数组遍历方法来遍历它们。典型的是函数的argument参数,还有像调用getElementsByTagName,document.childNodes之类的,它们都返回NodeList对象都属于伪数组。可以使用Array.prototype.slice.call(fakeArray)将数组转化为真正的Array对象。

10.对作用域上下文和this的理解,看下列代码:

var User = {

    count: 1,

    getCount: function() {

        return this.count;

    }

};

console.log(User.getCount()); // what?

var func = User.getCount;

console.log(func()); // what?

问两处 console 输出什么?为什么?

答案是 1 和 undefined。

func 是在 winodw 的上下文中被执行的,所以会访问不到 count 属性。

好了,今天的分享就10道题,大家要动手练习实践理解哦,最好能口述出来!

对你有用,点个关注吧!

上一篇下一篇

猜你喜欢

热点阅读