浏览器|前端人必看的JS面试题汇总

浏览器|前端人必看的JS面试题汇总

文章图片

浏览器|前端人必看的JS面试题汇总

文章图片


面试是每一个前端人在求职过程中都需要面对的事情 。 在面试过程中 , 面试官没有办法通过实践操作去了解应聘者的技能水平 , 所以他们更多地会通过“八股文”的考察来判断你是否符合公司的招聘要求 。 所以作为一个前端人 , 在掌握好前端技能的同时 , 也需要掌握好一些基础理论知识 , 这样才能在面试中脱颖而出 , 拿到自己心仪的offer 。


那么 , 下面小职就整理了一些在前端面试过程中比较常见的JS面试题 , 有需要的朋友可以点赞收藏哦~
一、JS数据类型
JS数据类型通常分为基本数据类型和引用数据类型两种 。
基本数据类型:Number、String、Boolean、Null、Undefined、Symbol、bigInt七种 ,
引用数据类型:object、Array、Date、Function、RegExp 。
二、JS变量和函数声明的提升
1、在JS中变量和函数的声明会提升到最顶部执行 。
2、函数的提升高于变量的提升 ,
3、函数内部如果用 var 声明了相同名称的外部变量 , 函数将不再向上寻找 。
4、匿名函数不会提升 。
三、== 和 ===的区别
== 和 ===都是判断等式两边是否相等 , 但是==是非严格意义上的相等 , 值相等就相等 , 而===是严格意义上的相等 , 会比较两边的数据类型和值大小 , 值和引用地址都相等才相等
四、闭包
闭包就是能够读取其他函数内部变量的函数 , 闭包基本上就是一个函数内部返回一个函数 。
优点:
1、可以读取函数内部的变量;
2、将变量始终保持在内存中;
3、可以封装对象的私有属性和私有方法;
缺点:比较耗费内存、使用不当会造成内存溢出的问题 。
五、this
this是 JavaScript 语言的一个关键字 。 在绝大多数情况下 , 函数的调用方式决定了 this 的值(运行时绑定) 。 this总是指向函数的直接调用者 。 如果有new关键字 , this指向new出来的对象 。 在事件中 , this指向触发这个事件的对象 。
六、map与forEach的区别
forEach 方法是最基本的方法 , 就是遍历与循环 , 默认有 3 个传参 。 这三个传参分别是遍历的数组内容 item、数组索引 index、和当前遍历数组 Array
map 方法基本用法与 forEach 一致 , 但是它会返回一个新的数组 , 所以 callback需要有 return 值 , 如果没有 , 会返回 undefined 。
七、箭头函数与普通函数
函数体内的 this 对象就是定义时所在的对象 , 而不是使用时所在的对象 。 不可以当作构造函数 , 也不可以使用 arguments 对象 , 该对象在函数体内不存在 。 如果一定要用 , 可以用 Rest 参数代替 。 不可以使用 yield 命令 , 因此箭头函数不能用作 Generator 函数 。
八、同源策略
同源策略是一种约定 , 它是浏览器最核心也最基本的安全功能 , 如果缺少了同源策略 , 则浏览器的正常功能可能都会受到影响 。可以说Web是构建在同源策略基础之上的 , 浏览器只是针对同源策略的一种实现 。它是一个安全策略 。 所谓同源是指 , 域名、协议、端口相同 。

九、严格模式的限制
严格模式主要有以下限制:
1、变量必须声明后再使用
2、函数的参数不能有同名属性 , 否则报错
3、不能使用with语句
4、不能对只读属性赋值 , 否则报错
5、不能使用前缀0表示八进制数 , 否则报错
6、不能删除不可删除的属性 , 否则报错
7、不能删除变量delete prop , 会报错 , 只能删除属性delete global[prop

8、eval不会在它的外层作用域引入变量
9、eval和arguments不能被重新赋值
10、arguments不会自动反映函数参数的变化
11、不能使用arguments.callee
12、不能使用arguments.caller
13、禁止this指向全局对象
14、不能使用fn.caller和fn.arguments获取函数调用的堆栈
15、增加了保留字(比如protected、static和interface)
十、es6新增
1、新增模板字符串
2、箭头函数
3、for-of(用来遍历数据—例如数组中的值 。 )
4、ES6 将 Promise 对象纳入规范 , 提供了原生的 Promise 对象 。
5、增加了 let 和 const 命令 , 用来声明变量 。
6、引入 module 模块的概念
十一、attribute 和 property 的区别
attribute 是 dom 元素在文档中作为 html 标签拥有的属性 , 而property 就是 dom 元素在 JS 中作为对象拥有的属性 。 对于 html 的标准属性来说 , attribute 和 property 是同步的 , 是会自动更新的 , 但是对于自定义的属性来说 , 他们是不同步的 。


推荐阅读