当前位置: 首页 > Web前端 > HTML

前端经典面试题,不经典就不要star!

时间:2023-04-02 12:43:53 HTML

上一期约定的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在ary中为true3;=>在ary中为false10;=>true表示3-9都是未初始化的错误!数组中不存在这些索引。这些坑会在调用数组函数的时候跳过。第四题:[typeofnull,nullinstanceofObject]知识点:Operators/typeofOperators/instanceoftypeof返回表示类型的字符串。instanceof操作符用于检测参数对象的原型链上是否存在constructor.prototype。这个问题可以直接参考链接。。。因为typeofnull==='object'从语言一开始就是这样的。。。typeof结果请看下表:typeresultUndefined"undefined"null“对象”布尔值“布尔值n"Number"number"String"string"Symbol"symbol"HostobjectImplementation-dependentFunction"function"Object"object"所以回答[object,false]第五题:functionsidEffecting(ary){ary[0]=ary[2];}functionbar(a,b,c){c=10sidEffecting(arguments);returna+b+c;}bar(1,1,1)知识点:Functions/argumentsfirstarguments对象是一个Array-likeobject对应传递给函数的arguments。也就是说arguments是一个对象,c是arguments[2],所以对c的修改就是对arguments[2]的修改。所以答案是21。但是!!!!当函数参数涉及任何剩余参数,任何默认参数或任何销毁参数时,参数不再是映射参数对象.....请参阅:functionsidEffecting(ary){ary[0]=ary[2];}functionbar(a,b,c=3){c=10sidEffecting(arguments);returna+b+c;}bar(1,1,1)答案是12!!!!请慢慢理解!!第6题:咳咳咳!细心的小伙伴发现我的第六题不是第六题而是第六题。其实这是你要思考的问题。如果有任何问题或讨论,欢迎留言!结语这是2017年的最后一篇文章!我是2017年11月7日创建这个账号的,准确的说是12月初进入segmentfault社区大家庭(刚开始接触答题文章等头条),一个月的时间感觉这个社区和其他地方不一样,玩的很开心!我从来没有在万社区写过文章,也许这对我个人来说是一大步!希望大家和我一起走下去!进步!进步!最后,提前祝大家2018年新年快乐,事业有成,钱包鼓鼓!最后,相信大家可以在新的一年里找到自己的女神做自己的女朋友啦!