js 相关面经

JavaScript

1、很多js,要怎么加载

  1. 懒加载js

  2. 动态加载

  3. js脚本合并

  4. 压缩js

  5. 无阻塞加载

2、如何判断A是不是B的实例

看他们的原型是否一样

3、纯函数怎么实现

函数的返回值之和传入的参数有关系

在执行过程中没有副作用

相同的输入总会得到相同的输出

4、arguments

5、原型链终点

6、作用域链中,window找的是谁

7、es6和commonjs模块化区别

  1. es6 编译时输出接口 commonjs 是运行时输出接口

  2. es6 import 得放在顶部 commonjs require可以放在任何地方

  3. es6 import 多次加载只执行一次 require 加载多少次执行多少次

  4. es6 导入的值不会随着导出的值改变 require 相反

  5. import 是关键字 后者不是

8、事件机制

  1. 事件源 事件的发出者

  2. 事件 事件发出的信息 状态

  3. 事件侦听者 对事件做出反应的对象

9、判断对象是否包含某个属性

// 1、
let obj = {name: 'gdy'}
if(obj.name === undefined) {
  console.log('false');
}else {
  console.log('true');
}
// 2、
let obj = {x:1}; 
console.log('x' in obj ? 'true' : 'false')
// 3、
let obj = {x:1}
console.log(obj.hasOwnProperty('x'));

10、数组和伪数组的区别?为什么要设置成伪数组?

11、加密与非对称加密

12、ajax

13、JavaScript 中的作用域与变量声明提升?

14、浏览器查内存泄漏的方法

  1. 未声明就使用的变量

  2. 闭包引起的内存泄漏

  3. 计时器没有及时清理

  4. 引用一个被删除的DOM

15、 document.fragement

没有父对象的最小文档对象,它不是真实dom 它的改变不会触发dom 树的重新渲染

16、判断是否是一个数组的方法

判断类型 加一个 isArray

17、浏览器渲染原理与过程(5)

18、let、var、const之间的区别

19、ES6新特性有哪些(12)

  1. symbol:新增的类型,唯一值

  2. const/let:生命关键字

  3. 解构赋值:var [a,b,c]=[1,,2] //a=1,b=’’,c=2; var [a,...b]=[1,2,3] //a=1,b=[2,3]

  4. Map和Set

    1. Map:var map=new Map([‘name’,’zhangsan’],[‘age’,20]) 对象的键只能时字符或者symbol,map可以时任何值map.set(key,value);map.get(key);map.size();map.delete(key);map.has(key);

    2. Set:var set=new Set([1,2,3])

      Set里面存放数组,但是值是唯一的,可以用来做数组去重

      set.add(value);set.delete(value);set.has(value);set.size()

  5. 对象新特性:

    1. 当值名和键名一致时可以直接用值名当键名

      var name=’zhangsan’

      var obj={name,age:30}

    2. ...三点运算,用于拷贝var obj1={...obj}

    3. Object.assign():浅拷贝var obj2; Object.assign(obj1,obj2)

    4. Object.is():和’===’类似,但是+0!=-0;NAN===NAN;Object.is(1,1)

  6. 字符串新方法:var str=’blue,size,red’

    1. str.includes():判断字符串是否包含某个字符串

    2. str.startwith():是否以这个字符串开头

    3. str.endwith():是否以这个字符串结尾

    4. ‘hello’.repeat(2):重复n遍字符串,返回新字符串

  7. 数组新方法:var arr=[1,2,3,4]

    1. Array.of():赋值var arr=Array.of(1,2,3,[4]) //arr:[1,2,3,[4]]

    2. Array.from(arr,function(n){},this指向):三个参数,n指的就是arr中的元素

    3. find()

    4. findindex()

    5. arr.fill():替换部分元素arr.fill(0,0,3) //arr:[0,0,0,4]

    6. arr.copywithin():替换部分元素arr.copywithin(0,2,4) //arr:[1,4,3,4]

    7. arr.include():判断数组中是否包含某一项

  8. 函数

    1. 函数参数可以设置默认值了

    2. 不定参数function add(...num){} 表示不一定有几个参数

  9. 箭头函数:this指向默认指向父级

  10. class类: class person{}

    1. 构造函数:constructor(参数){},表示该类的构造函数

  11. 模块导入导出:

    1. 导入

      import 名称 from 路径

      import 路径

    2. 导出

      export:export{name,age};

      export default:export default person;(在同一个模块中,export default 只允许向外暴露一次成员)

  12. promise

20、进程和线程

21、文本超过一个高度显示省略号

22、defer和async区别

async,加载和渲染后续文档元素的过程将和 script.js 的加载与执行并行进行(异步)

defer,加载后续文档元素的过程将和 script.js 的加载并行进行(异步),但是 script.js 的执行要在所有元素解析完成之后,DOMContentLoaded 事件触发之前完成。

23、 history里用什么方法监听路由变化

window.addHistoryListener

24、遍历对象的方法Object.keys和for-in有什么区别

keys 不走原型链 返回一个对象所有键值的数组

25、forEach(增强for循环)和for循环的区别

26、 箭头函数里不能用arguments,如果想要在箭头函数里用arguments要怎么做?

27、 介绍 js 的基本数据类型

28、javascript有几种类型的值?你能画一下他们的内存图吗?

基本 引用 栈 堆

29、什么是堆?什么是栈?它们之间有什么区别和联系

30、 内部属性 [[Class]] 是什么?

所有typeof返回值为“object”的对象(如数组)都包含一个内部属性[[class]],这个属性无法直接访问,一般通过Object.prototype.toString().call()来查看。

40、介绍 js 有哪些内置对象?

41、 拼接字符串有几种方法

42、查找出现最多的标签 在一个HTML页面中遍历整棵DOM树

43、null 和 undefined 的区别?

44、如何获取安全的 undefined 值?

45、说几条写 JavaScript 的基本规范?

46、 JavaScript 原型,原型链? 有什么特点?

47、 js 获取原型的方法?

48、在 js 中不同进制数字的表示方式

49、js 中整数的安全范围是多少?

50、typeof NaN 的结果是什么

51、 isNaN 和 Number.isNaN 函数的区别?

52、Array 构造函数只有一个参数值时的表现?

53、数组方法

54、其他值到字符串的转换规则

55、其他值到数字值的转换规则?

56、其他值到布尔类型的值的转换规则?

57、{} 和 [] 的 valueOf 和 toString 的结果是什么?

58、~ 操作符的作用

59、forEach和map的区别

60、 数组去重

61、 map和Object区别

62、 解析字符串中的数字和将字符串强制类型转换为数字的返回结果都是数字,它们之间的区别是什么?

63、+ 操作符什么时候用于字符串的拼接

64、什么情况下会发生布尔值的隐式强制类型转换?什么情况下会发生布尔值的隐式强制类型转换?

65、|| 和 && 操作符的返回值?

66、== 操作符的强制类型转换规则?

67、Symbol 值的强制类型转换?

68、生成随机数的各种方法?

69、如何实现数组的随机排序?

70、javascript 创建对象的几种方式?(4种)

71、JavaScript 继承的几种实现方式?

72、Javascript 的作用域链?

73、谈谈 This 对象的理解

74、eval 是做什么的?

75、 什么是 DOM 和 BOM?

76、事件是什么?IE 与火狐的事件机制有什么区别?如何阻止冒泡?

77、三种事件模型是什么?

78、事件委托是什么?

79、["1", "2", "3"].map(parseInt) 答案是多少?

80、什么是闭包,为什么要用它?

81、javascript 代码中的 "use strict"; 是什么意思 ? 使用它区别是什么?

82、如何判断一个对象是否属于某个类?

83、instanceof 的作用?手写intanceof?

84、new 操作符具体干了什么呢?如何实现?

85、 对于 JSON 的了解?

86、 [].forEach.call((""),function(a){a.style.outline="1pxsolid#"+(~~(Math.random()(1<<24))).toString(16)}) 能解释一下这段代码的意思吗?

87、js 延迟加载的方式有哪些?

88、同步和异步的区别?

89、documen.write 和 innerHTML 的区别?

90、DOM 操作——怎样添加、移除、移动、复制、创建和查找节点?

91、数组和对象有哪些原生方法,列举一下?

92、call() 和 .apply() 的区别?

93、数组的填充 fill 方法?

94、 如何编写高性能的 Javascript ?

95、简单介绍一下 V8 引擎的垃圾回收机制

96、如何判断当前脚本运行在浏览器还是 node 环境中?

97、把 script 标签放在页面的最底部的 body 封闭之前和封闭之后有什么区别?浏览器会如何解析它们?

98、移动端的点击事件的有延迟,时间是多久,为什么会有? 怎么解决这个延时?

99、什么是“前端路由”?什么时候适合使用“前端路由”?“前端路由”有哪些优点和缺点?

100、检测浏览器版本版本有哪些方式?

101、使用 JS 实现获取文件扩展名?

102、介绍一下 js 的节流与防抖?

103、Object.is() 与原来的比较操作符 “===”、“==” 的区别?

104、 js 的事件循环是什么?

105、 js 中的深浅拷贝实现?

106、函数柯里化的实现

107、为什么 0.1 + 0.2 != 0.3?如何解决这个问题?

108、 原码、反码和补码的介绍

109、 什么是 Virtual DOM?为什么 Virtual DOM 比原生 DOM 快?(虚拟DOM)

110、如何比较两个 DOM 树的差异?

111、offsetWidth/offsetHeight,clientWidth/clientHeight 与 scrollWidth/scrollHeight 的区别?

112、谈一谈你理解的函数式编程?

113、 异步编程的实现方式?

114、 Js 动画与 CSS 动画区别及相应实现

115、 mouseover 和 mouseenter 的区别?

117、js 拖拽功能的实现

118、为什么使用 setTimeout 实现 setInterval?怎么模拟?

119、Symbol 类型的注意点?

120、require 模块引入的查找方式?

121、深度优先遍历(DFS)和广度优先遍历(BFS)

122、如何判断一个对象是否为空对象?

123、 一个列表,假设有 100000 个数据,这个该怎么办?

124、手写一个观察者模式?

125、手写promise

126、手写 call、apply 及 bind 函数

127、generator和promise的区别

128、canvas

129、promise知道哪些API

130、promise和async,await区别

131、实现瀑布流

132、常用正则表达式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值