1.有一个未知长度的数组a,如果它的长度为0,就给数组加1,否则按照先进先出的队列规则让第一个元素出队。解析:本题主要考察数组的队列方法和栈方法。另外,原题有字数限制。只有字数在30以内,且结果正确,才能得满分。所以,我们可以使用三元运算符(:?)来减少字数。代码如下:a.length===0?a.push(1):a.shift();忘了是shift还是unshift离队了,unshift用错了晕倒了!2.下面的代码会输出什么:vartest=(function(a){this.a=a;returnfunction(b){returnthis.a+b;}}(function(a,b){returna;}(1,2)));控制台日志(测试(4));//输出是什么????解析:这道题考的是函数相关的两个很重要的概念:自执行函数和闭包。不过不难,答案应该是5。3.请把
(中间有10行ullielement)intobody,注意:需要考虑性能问题。解析:本题主要考察dom操作。您可以使用insertBefore和appendChild方法来插入节点,您可以使用任何一个。不过题目需要考虑性能问题,这是关键,因为JavaScript操作dom的开销是非常大的!提高性能需要减少dom操作。因此,我当时使用了如下方法,操作一次dom就够了:varlis="",ul=document.createElement("ul");//将li生成为字符串for(vari=1;i<=10;i++){lis+="
th"+i+"line";}//最后将ul插入ul通过innerHTMLul.innerHTML=lis;//这里只操作dom,将ul插入bodydocument.body.appendChild(ul);4、不用loop循环,创建一个长度为100的数组,每个元素的值都等于它的下标。分析:当看到题目要求不要使用loop循环时,我“太聪明了”,立马想到了使用间歇定时器setInterval。代码如下:vara=[],i=0;varinterval=setInterval(function(){i<100?a.push(i++):clearInterval(interval);},0);确实没有用loop循环,还庆幸自己的小聪明!但是后来和小伙伴们讨论后才知道,这道题的目的是考察我们对数组的熟练程度,而不是考察定时器!而且,这样创建数组的性能也不一定高!他的做法是先创建一个长度为100的数组,然后使用数组的实例方法Array.prototype.map重新赋值。代码如下:vara=newArray(100);a=a.map(function(item,index){returnindex;});用map的方式真的是高端又准时!一开始我以为他的回答是对的,后来在控制台打印出来,却发现不对,因为最后的数组是一个空数组,长度为100,如下:it'swired!这么好用的方法居然输出不正确的结果,好累!后来查API才知道JavaScript数组是稀疏数组。比如通过newArray(100)新建一个数组,虽然它的长度是100,但实际上是一个空数组,也就是说没有真正的元素。所以使用map方法,你根本不会遍历这个数组100次。后来问了它才知道一个新的可行方法,如下:vara=Array(100).join(",").split(",").map(function(item,index){ 返回索引;});这个解决方案充满曲折!先创建一个数组,然后通过join方法将其转化为字符串,再通过split方法将字符串转化为数组。此时它有100个空值的元素,然后通过map函数改变这些元素的值。5.实现数组的随机顺序本题考查数组的排序方法,因为是随机的,所以还需要用Math.random()产生随机数,打乱排序规则!代码如下:vara=[1,2,3,4,5,6,7,8,9,10],sign=1;a.sort(function(a,b){//因为Math.random产生的数在0-1之间//所以0.5两边的概率相等//大于0.5时为升序序,小于0.5时降序sign=(Math.random()>0.5)?1:-1;return(a-b)*sign;});6、有一个数组,长度为100,请优雅的求数组前10个元素的和分析:其实数组求和的方法有很多种,而且很简单。然而,这道题有两个限制条件:一种优雅的方式,以及前10个元素。对于“前10个元素”的限制,可以使用Array.prototype.slice()方法进行拦截。对于“优雅的方式”,我的理解是尽量使用数组自带的方法,最好使用高阶函数!所以我觉得应该是Array.prototype.reduce()方法。代码如下:vara=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],sum=0;sum=a.slice(0,10).reduce(function(pre,current){ returnpre+current;});控制台日志(总和);//55看来会比使用for循环优雅多了!以下问题均为主观题,答案不唯一。7、JavaScript实现继承的常用方法有哪些?你推荐哪一个?8、项目开发完成后,根据雅虎的性能优化规则,需要对html、JS、CSS、图片做什么样的处理?它可以在构建工具的帮助下实现自动化吗?9.当项目的某个模块出现问题时,你是如何定位错误的?你常用的调试工具是什么?10、当我们和后端进行异步请求时,很容易陷入嵌套太深的陷阱?学前端的同学注意啦!!!如果大家在学习过程中遇到任何问题或者想获取学习资源,欢迎加入前端学习交流群461593224,一起来学习前端吧!