2021-最新Web前端经典面试试题及答案-史上最全前端面试题(含答案)---JavaScript篇

★★ 介绍一下JS的内置类型有哪些?

★★★★ 介绍一下 typeof 区分类型的原理

★★★ 介绍一下类型转换

★★★★ 说说你对 JavaScript 的作用域的理解。什么是作用域链?

★★ 解释下 let 和 const 的块级作用域

★★★★ 说说你对执行上下文的理解

★★★ 对闭包的看法,为什么要用闭包?说一下闭包的原理以及应用场景?闭包的 this 指向问题?

★★★ 简述闭包的问题以及优化

★★★ 如何确定 this 指向?改变 this 指向的方式有哪些?

★★★ 介绍箭头函数的 this

★★★ 谈一下你对原型链的理解,画一个经典的原型链图示

★★★ ES5/ES6 的继承除写法以外还有什么区别?

★★★★ 你对事件循环有了解吗?说说看!

★★★★ 微任务和宏任务有什么区别?

★★★★★ 浏览器和 Node 事件循环的区别?

★★★ 异步解决方案有哪些?

★★★ async 和 await 、promise的区别 和 这两个的本质

★★★ 简述 aync await 的好处

★★★ 移动端点击事件 300ms 延迟如何去掉?原因是什么?

★★★ Cookie 有哪些属性?其中HttpOnly,Secure,Expire分别有什么作用?

★★★ 用多种方法实现 JavaScript 继承。

★★★★ 如何实现函数的柯里化?比如 add(1)(2)(3)

★★★★ 什么是反柯里化

★★ 将 [1,2] 与 [3,[4]] 合并为 [1,2,3,[4]]

★★ Array.forEach() 与 Array.map() 的区别,Array.slice() 与 Array.splice() 的区别?

★★ 将 1234567 转换为 1,234,567

★★★ bind 的作用是什么?

★★ Promise.resolve(Promise.resolve(1)).then(console.log) 输出?

★★★ var let const的区别

★★★ document load 和 documen ready的区别

★★★ 如何自定义事件?

★★★ 如何用 setTImeout 来实现 setInterval?

★★★ 如何判断 user 对象里有没有 a 这个属性?如果把user对象中所有的属性都输出出来?[这里是代码001]

★★ 使用 setTimeout 模拟 setInterval 的功能做一个60秒的倒数计时

★★★ 实现一个函数 add(),运算结果可以满足如下预期结果

add(1)(2) //3
add(1,2,3)(10) //16
add(1)(2)(3,4)(5) //15

★★★ 如何避免回调地狱?

★★ 写一个 function,清除字符串前后的空格。(兼容所有的浏览器)

★★ 使用正则表达式验证邮箱格式。

★★★ 简述同步和异步的区别

★★ JavaScript 中 callee 和 caller 的作用

★★ 统计字符串中字母个数或统计最多的字母数。

★★★ jQuery 的事件委托方法 on,live,delegate之间有区别?

★★★ 简述下 Promise 对象

★★★ 数组扁平化,不用 api

★★★ 用 JavaScript 实现观察者模式

★★ 简述一下面象对象的六法则

★★★ 谈谈垃圾回收机制方法以及内存管理

★★★ 开发过程中遇到内存泄漏的问题都有哪些?

★★★ 请编写获取当前窗口地址中查询参数name的值,当前窗口地址为:https://foo.com/?id=1&name=tom

★★★ 已知a,b两个构造函数,现在 let c = new a(),如何在c的存储地址不变的情况下,改变c的继承(c->a 转为 c->b)

★★★ 浏览器有哪些兼容问题,你封装过什么插件

★★★ 如何判断一个对象是否为数组,函数

★★★ 写一个函数,接受可变个数参数,且每个参数均为数字,返回参数的最大值。

★★★ 请写出 ES6 Array.isArray()

★★★ 实现一个函数 clone,可以对 JavaScript 中的5种主要数据类型进行值复制。

★★★ 假如A页面我定义了一个定时器,然后跳到B页面如果让A页面的定时器暂停

★★★ promise的实现原理,如果我现在向服务器发送一个请求,但是我后悔了,不想让服务器返回数据,去实现一个delay

★★★ CommonJS 和 RequireJS 的实现原理

★★★ 面向对象编程与面向过程编程的区别?

★★★ eval 是做什么的?性能怎么样?安全如何?

★★★★★ 函数节流、防抖。scroll resize 使用函数节流实现不要频繁触发事件的需求。

★★★ 数据类型(判断,=)堆栈、内存泄漏及垃圾回收机制

★★★★ 了解 ES6 的 Proxy 吗?

★★★★ 深拷贝是什么?项目哪里是用到了深拷贝?

★★★ swiper 插件从后台获取数据没问题,css 代码啥的也没问题,但是图片不动,应该怎么解决?

★★★★ ES6 中,数组监测怎么实现的(代理)

★★ jQuery 优点和缺点

★★★ ES6 class 关键字原理跟 function 什么区别?

★★★ iframe 跨域问题,页面之间怎么传值?

★★★ 简述 commonJS、AMD 和 CMD

★★★ require.js 源码看过吗?怎么做到异步加载的

★★ jQuery,$() 能传什么参数? html 代码怎么解析? 传 function 呢?

★★ AMD 怎么加载文件的?

★★ jQuery 怎么找到事件源元素

★★★★ 模板引擎原理

★★ map 和 foreach 的区别

★★★★ ES6 的新特性

★★ 2018/01/01 转换成 2018年/1月/1日

★★★ 0.1+0.2 等不等于 0.3?自己封装一个让他们相等的方法

★★★ 跨域是什么?有哪些解决跨域的方法和方案?

★★★ 什么是函数式编程?什么的声明式编程?

★★★ super() 是否必须执行?不执行怎么让它不报错?

★★★ eventloop 渲染在哪一步?

★★★★ 图片懒加载怎么实现?

★★ for-in 循环会遍历出原型上的属性吗?怎么避免遍历到原型上的属性

★★★ 简述call、apply、bind,call 和 apply哪个性能更好?

★★ ES6 箭头函数和普通函数有什么差异?

★★★ Promise 避免回调地狱的语法糖–实现链式调用的核心点是什么?

★★★ 进程线程区别是什么?

★★★ 禁止事件冒泡,禁止默认事件

★★ import export commonJS 对比区别

★★ 为什么 JavaScript 是单线程

★★★ 使用箭头函数应该注意什么?

★★★ 你知道 ES6 中的 Generator 和 yiled 吗?在实际开发中使用过吗?

★★★ Cookie、storage 的区别?什么时候使用?

★★★ map、fillter、reduce 各自有什么作用?

★★ JS的基本数据类型判断有什么方法?

★★★ 构造函数、实例对象、原型对象三者的关系是什么?

★★★★★ JS中的常见设计模式以及应用场景?

★★ 介绍下事件代理,主要解决什么问题

★★★★ 异步的解决方案有哪些?

★★ new 的原理是什么?通过 new 的方式创建对象和通过字面量创建有什么区别?

★★ 数组去重的方法

★★★★ 常见内存泄漏

★★★ promise 常见方法和 all 和 race的应用场景

★★★ 介绍一下 ES6 中 Set, Map的区别?

★★ 并行和并发的区别是什么?

★★★ 为什么操作 dom 慢?

★★★★ 插入几万个 dom ,如何实现页面不卡顿?

★★★ js中的常用事件绑定方法

★ 简述 src 和 href 的区别?

★★★★ 你知道什么是原型吗?我们为什么要用原型呢?或者说原型为我们提供了什么?

★★★ 你了解原型链吗 你能说说 prototype 与?proto?的区别吗?

★★★ ts 和 js 的区别

★★★ 简述原生 js 发 ajax 的步骤

★★ 是否所有函数都有 prototype 一说?

★★ 为什么 await 在 forEach 中不生效?如何解决?

★ a 标签中,如何禁用 href 跳转页面或定位链接?

★★ 请描述一下 cookies,sessionStorage 和 localStorage 的区别?

★★★ instanceof的原理是什么?

JavaScript面试真题

1. ★★ 介绍一下JS的内置类型有哪些?

1. 空类型:null
2. 未定义:undefined
3. 布尔:boolean
4. 数字:number
5. 字符串:string
6. 符号:symbol(ES6新增)
7. 对象:object
除了对象之外,其他为基本类型.

2. ★★★★ 介绍一下 typeof 区分类型的原理

typeof原理: 不同的对象在底层都表示为二进制,在Javascript中二进制前(低)三位存储其类型信息。

000: 对象
010: 浮点数
100:字符串
110: 布尔
1: 整数
/*----------------------------------------------*/
typeof null 为"object", 原因是因为 不同的对象在底层都表示为二进制,在Javascript中二进制前(低)三位都为0的话会被判断为Object类型,null的二进制表示全为0,自然前三位也是0,所以执行typeof时会返回"object"

3. ★★★ 介绍一下类型转换

/*-------------------显式转换---------------------*/
1. toString()      // 转化为字符串,不可以转null和underfined
2. Number()     // 转换为数字,字符串中有一个不是数值的字符,返回NaN
3. parseInt()    // 转换为数字,第一个字符不是数字或者符号就返回NaN
4. String()     // 转换为字符串, 
5. Boolean()     // 转换为布尔值
/*-------------------隐式转换(+-)---------------------*/
当 JavaScript 尝试操作一个 "错误" 的数据类型时,会自动转换为 "正确" 的数据类型
1. num  +  ""  -> String
2. num + bool -> num
// 当加号运算符时,String和其他类型时,其他类型都会转为 String;其他情况,都转化为Number类型

3. string - num -> num
// 其他运算符时, 基本类型都转换为 Number,String类型的带有字符的比如: 
4. 'a1' - num -> NaN
// 与undefined 一样。

/*-------------------隐式转换(逻辑表达式)---------------------*/

1. 对象和布尔值比较
对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
[] == true;  //false  []转换为字符串'',然后转换为数字0,true转换为数字1,所以为false
2. 对象和字符串比较
对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
[1,2,3] == '1,2,3' // true  [1,2,3]转化为'1,2,3',然后和'1,2,3', so结果为true;
3. 对象和数字比较
对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。
[1] == 1;  // true  `对象先转换为字符串再转换为数字,二者再比较 [1] => '1' => 1 所以结果为true
4. 字符串和数字比较
字符串和数字进行比较时,字符串转换成数字,二者再比较。
'1' == 1 // true
5. 字符串和布尔值比较
字符串和布尔值进行比较时,二者全部转换成数值再比较。
'1' == true; // true 
6. 布尔值和数字比较
布尔值和数字进行比较时,布尔转换为数字,二者比较。
true == 1 // true

4. ★★★★ 说说你对 JavaScript 的作用域的理解。什么是作用域链?

在 JavaScript 中有两种作用域类型:

1. 局部作用域:只能在函数内部访问它们
2. 全局作用域:网页的所有脚本和函数都能够访问它
JavaScript 拥有函数作用域:每个函数创建一个新的作用域。

作用域决定了这些变量的可访问性(
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值