前言

(以下内容为一个朋友所述)今天我想跟大家分享几个前端经典的面试题,为什么我突然想写这么一篇文章呢?今天我应公司要求去面试了下几位招聘者,然后又现场整不出几个难题,就搜了一下前端变态面试题! HAHA,前提我并不是一个变态,欺负人的面试官.只是我希望看看对方的逻辑能力!

从而又拿这些面试题进行了自我检测,发现还是有一些坑的~~~
接下与大家进行几道题的分析 分享 互勉!

正文

先把我挑选的几道,不一定最经典.但是会让你有学习的进步!列举一下

//第1题 ["1", "2", "3"].map(parseInt) //第2题 [ [3,2,1].reduce(Math.pow), [].reduce(Math.pow) ] //第3题 var ary = [0,1,2]; ary[10] = 10; ary.filter(function(x) { return x === undefined;}); //第4题 [typeof null, null instanceof Object] //第5题 function sidEffecting(ary) { ary[0] = ary[2]; } function bar(a,b,c) { c = 10 sidEffecting(arguments); return a b c; } bar(1,1,1) //第六题 var END = Math.pow(2, 53); var START = END - 100; var count = 0; for (var i = START; i <= END; i ) { count ; } console.log(count); 

读者思考时间

大家努力思考,努力!==============================================

接下来一道一道咱们去慢慢解析

第一题:

["1", "2", "3"].map(parseInt) 

这道题知识点包括:

  1. Array/map
  2. Number/parseInt
  3. JavaScript parseInt

按照上面知识点来串一下这道题!

首先, map接受两个参数, 一个回调函数 callback, 一个回调函数的this值 其中回调函数接受三个参数 currentValue, index, arrary; 而题目中, map只传入了回调函数--parseInt. 其次, parseInt 只接受两个两个参数 string, radix(基数). 本题理解来说也就是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 需要注意的是 If the array is empty and no initialValue was provided, TypeError would be thrown. 所以第二个表达式会报异常. 第一个表达式等价于 Math.pow(3, 2) => 9; Math.pow(9, 1) =>9 

答案

an
error

第三题:

var ary = [0,1,2]; ary[10] = 10; ary.filter(function(x) { return x === undefined;}); 答案是 []

知识点是:

  • 稀疏数组

我们来看一下 Array.prototype.filter 的 polyfill:

if (!Array.prototype.filter) { Array.prototype.filter = function(fun/*, thisArg*/) {  'use strict'; if (this === void 0 || this === null) { throw new TypeError(); } var t = Object(this); var len = t.length >>> 0; if (typeof fun !== 'function') { throw new TypeError(); } var res = []; var thisArg = arguments.length >= 2 ? arguments[1] : void 0; for (var i = 0; i < len; i ) { if (i in t) { // 注意这里!!! var val = t[i]; if (fun.call(thisArg, val, i, t)) { res.push(val); } } } return res; }; }

我们看到在迭代这个数组的时候, 首先检查了这个索引值是不是数组的一个属性, 那么我们测试一下.

0 in ary; => true 3 in ary; => false 10 in ary; => true

也就是说 从 3 - 9 都是没有初始化的

bug 

!, 这些索引并不存在与数组中. 在 array 的函数调用的时候是会跳过这些坑的.

第四题:

[typeof null, null instanceof Object]

知识点:

  1. Operators/typeof
  2. Operators/instanceof

typeof 返回一个表示类型的字符串.

instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上.

这个题可以直接看链接... 因为 typeof null === 'object' 自语言之初就是这样....

typeof 的结果请看下表:

type         result
Undefined   "undefined" Null "object" Boolean "boolean" Number "number" String "string" Symbol "symbol" Host object Implementation-dependent Function "function" Object "object" 

所以答案 [object, false]

第五题:

function sidEffecting(ary) { ary[0] = ary[2]; } function bar(a,b,c) { c = 10 sidEffecting(arguments); return a b c; } bar(1,1,1) 

知识点:

  • Functions/arguments

首先 The arguments object is an Array-like object corresponding to the arguments passed to a function.

也就是说 arguments 是一个 object, c 就是 arguments[2], 所以对于 c 的修改就是对 arguments[2] 的修改.

所以答案是 21.

但是!!!!

当函数参数涉及到 any rest parameters, any default parameters or any destructured parameters 的时候, 这个 arguments 就不在是一个 mapped arguments object 了.....

请看:

function sidEffecting(ary) { ary[0] = ary[2]; } function bar(a,b,c=3) { c = 10 sidEffecting(arguments); return a b c; } bar(1,1,1)

答案是 12 !!!!

请慢慢体会!!

第六题:

咳咳咳!
细心的小伙伴发现了我第

6

题不是第

6

题而是第


其实这个是给你们留下一个思考的题 如果有疑问或者探讨请留言!

【我有一个前端学习交流QQ群:328058344 如果你在学习前端的过程中遇到什么问题,欢迎来我的QQ群提问,群里每天还会更新一些学习资源。禁止闲聊,非喜勿进。】

前端经典面试题 不经典不要star!相关推荐

  1. stm32经典笔试题_经典面试题及解析

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 基础部分考察 1.用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) #define SECONDS_PER_YEAR (6 ...

  2. Web前端经典面试试题(二)

    上次由于时间有限只分享了一部分的前端面试题,所以本篇继续分享前端经典面试试题 一. 栈和队列的区别? 栈的插入和删除操作都是在一端进行的,而队列的操作却是在两端进行的. 队列先进先出,栈先进后出. 栈 ...

  3. Web前端经典面试试题(一)

    本篇收录了一些面试中经常会遇到的经典面试题,并且都给出了我在网上收集的答案.眼看新的一年马上就要开始了,相信很多的前端开发者会有一些跳槽的悸动,通过对本篇知识的整理以及经验的总结,希望能帮到更多的前端 ...

  4. 应届生web前端面试题_2020最新Web前端经典面试题试题及答案(持续更新)

    Web前端面试题 Web前端面试题:说说你对webpack的看法 解析:webpack是一个模块打包工具,可以使用webpack管理你的模块依赖,并编译输出模块们所需要的静态文件.能很好的管理.打包w ...

  5. 网易校园招聘历年经典面试题汇总:前端 岗

    这个系列计划收集几百份朋友和读者的面经,作者合集方便查看,各位有面经屯着可以联系我哦 这个系列离结束差的还特别多,会更新涵盖所有一线大厂的所有岗位,也可以关注一下. 腾讯校园招聘历年经典面试题汇总:前 ...

  6. 前端多图片上传怎么控制顺序_Web前端经典面试题有哪些 如何能走向高薪之路...

    Web前端经典面试题有哪些?如何能走向高薪之路?Web前端在近几年是越来越火热了,很多人看到了前端的高薪资,更看到了前端行业的发展前景,所以纷纷投入到学习前端技术学习中来.下面给大家总结整理一些Web ...

  7. web前端岗位经典面试题,面试前必读!

    小编周末将之前推送的经典面试题在这里进行一下汇总,方便后面关注的同学们查看,很多同学都是初学阶段,缺乏面试经验,希望这份东西真的能帮助到你们. 面试系列 1:输入网址按下enter,究竟发生了什么? ...

  8. Web前端经典面试题-JavaScript

    Web前端经典面试题-JavaScript 看看银行卡余额,看看工资条,看看房价,动力就来了,大二狗,加油~~ JavaScript 原型链.类.继承.作用域.闭包.js运行机制/单线程.js数据类型 ...

  9. 2018最新Web前端经典面试试题及答案

    本篇收录了一些面试中经常会遇到的经典面试题以及自己面试过程中遇到的一些问题,并且都给出了我在网上收集的答案.马上就要过春节了,开年就是崭新的一年,相信很多的前端开发者会有一些跳槽的悸动,通过对本篇知识 ...

最新文章

  1. CMake添加-g编译选项
  2. 移动手机平台的HTML5前端优化指南
  3. 【Google Play】IARC 年龄分级 ( IARC 国际年龄分级联盟 | Google Play 设置应用年龄分级 )
  4. sdut 1466 双向队列
  5. ilistT 与listT 之间的相互转换
  6. 对java面向对象的三大特征的理解_Java面向对象的三大特征是什么?
  7. ABAP的语法高亮是如何在浏览器里显示的
  8. 雨林木风win11 32位装机版镜像v2021.07
  9. Microsoft 推出在AzureApp Service上支持Windows容器的公开预览版
  10. 苏强SN系列服务器说明书,第一章 SN2000交流伺服驱动器使用手册.pdf
  11. http地址后面加上问号?防止IE缓存
  12. pycharm 常用设置
  13. 性能优化-简谈JVM
  14. Linux下udev详细介绍
  15. 增程式串联混合动力实际项目模型,本模型基于Cruise软件和Simulink软件共同搭建完成,并实际应用,本资料包包含所有源文件
  16. JSP之实现分页查询
  17. 【WordCloud】将周董的歌用词云可视化
  18. unit怎么发音_“unit”怎么读?
  19. 略谈“10步天才(10 step)思维模型”
  20. 智能送药小车解说(国二)

热门文章

  1. java scavenge_请概述一下Java中都有哪些垃圾收集器
  2. 下载 沙耶之歌Android_沙耶之歌安卓版apk-沙耶之歌下载手机版v1.2-飘荡下载
  3. cmakelists语法_CMakeList语法知识
  4. python3开发工具推荐_python开发工具有哪些?我推荐这5款python开发工具!
  5. c语言实现二分法_C语言实现二分法求解方程在区间内的根
  6. 一个逐步“优化”的范例程序(转)
  7. fixed 语句(C# 参考)
  8. struts中多个模块时,使用多个struts-config.xml文件之间时如何切换的!
  9. matlab zeros初始化为0矩阵
  10. 小心使用STL中map的[]操作符