上一期约定的node.js进阶核心模块和基础web应用的使用,2日或3日与大家见面。在此之前,我想和大家分享几道经典的前端面试题。为什么我突然想写这样一篇文章?今天应公司要求面试了几个招聘人员,然后现场解决不了几个问题,就搜了一下前端变态面试题!哈哈,前提是我不是变态bullying面试官。就是想看看对方的逻辑能力!于是就拿这几道面试题自测,发现还是有一些坑~~~接下来我就几道题和大家一起分析一下,互相交流,互相鼓励!正文先选几个我选的,不一定是最经典的。但是会让你在学习上有进步!列一下//问题1["1","2","3"].map(parseInt)//问题2[[3,2,1].reduce(Math.pow),[].reduce(Math.pow)]//问题3varary=[0,1,2];ary[10]=10;ary.filter(function(x){returnx===undefined;});//问题4[typeofnull,nullinstanceofObject]//问题5functionsidEffecting(ary){ary[0]=ary[2];}functionbar(a,b,c){c=10sidEffecting(arguments);returna+b+c;}bar(1,1,1)//第6题varEND=Math.pow(2,53);变量开始=结束-100;变量计数=0;for(vari=START;i<=END;i++){count++;}控制台日志(计数);读者苦思冥想,苦思冥想,苦苦思索!==================================================下面一一来慢慢分析第一题:["1","2","3"].map(parseInt)这道题的知识点包括:Array/mapNumber/parseIntJavaScriptparseInt我们把这道题根据以上知识点!一、map接受两个参数,一个回调函数callback,回调函数的this值,回调函数接受三个参数currentValue、index、arrary;而标题中map只传入了回调函数--parseInt。其次,parseInt只接受两个参数string,radix(Cardinality)。这道题的理解是key和index,所以这道题要问parseInt('1',0);parseInt('2',1);parseInt('3',2);首先,后两者的参数是非法的。所以答案是[1,NaN,NaN]如果研究明白了parseInt(3,8)parseInt(3,2)//在这个问题的答案下面评论,不要'不要作弊!parseInt(3,0)第二题:[[3,2,1].reduce(Math.pow),[].reduce(Math.pow)]本题知识点:Array/Reduce穿插知识点一次这个问题!arr.reduce(callback[,initialValue])reduce接受两个参数,一个回调和一个初始值。回调函数接受四个参数previousValue、currentValue、currentIndex、array。请注意,如果数组为空且未提供initialValue,则会抛出TypeError。所以第二个表达式会报异常。第一个表达式等同于Math.pow(3,2)=>9;Math.pow(9,1)=>9回答了一个错误问题3:varary=[0,1,2];阿里[10]=10;ary.filter(function(x){returnx===undefined;});答案是[]知识点是:稀疏数组我们来看看Array.prototype.filter的polyfill:if(!Array.prototype.filter){Array.prototype.filter=function(fun/*,thisArg*/){'使用严格';如果(这===无效0||这===null){抛出新的TypeError();}vart=Object(this);varlen=t.length>>>0;if(typeoffun!=='function'){thrownewTypeError();}varres=[];varthisArg=arguments.length>=2?参数[1]:void0;for(vari=0;i
