Skip to content

JS 篇

保存了一些尚未整合的问题

如何判断某个字符串长度(要求支持表情)?

对于特殊的表情字符当使用 length 的时候会返回 2 个,如 😀 : '😀'.length 得到的是 2

  1. 展开操作符
js
const str = "😀12"
console.log([...str].length) // 3
  1. Array.from 转换为数组
js
const str = "😀12"
console.log(Array.from(str).length) // 3

怎么实现 this 对象的深拷贝

搜索请求中文如何请求

监听文本输入框的 input 事件,在拼写汉字(输入法)但汉字并未实际填充到文本框中(选词)时会触发 input 事件,如图: Alt text

触发 compositionstart 时,文本框会填入 “虚拟文本”(待确认文本),同时触发 input 事件;在触发 compositionend 时,就是填入实际内容后(已确认文本)。

先看看 compositionstart 的描述 和 compositionend 的 描述

compositionstart 事件触发于一段文字的输入之前(类似于 keydown 事件,但是该事件仅在若干可见字符的输入之前,而这些可见字符的输入可能需要一连串的键盘操作、语音识别或者点击输入法的备选词)。

compositionend 当文本段落的组织已经完成或取消时,会触发该事件。

动画的了解

  • CSS 动画 : transtion、animation
  • JS 动画: requestAnimationFrame

优缺点:

  1. CSS 动画相对流畅且在帧数不理想的浏览器中会自然降级 。 缺点: 无法控制且没有事件监听
  2. JS 动画 优点: 可以完整控制整个动画过程 缺点: 1. 因为单线程问题可能出现卡帧的情况。 2. JS 动画复杂度较高

介绍暂时性死区

JS 中变量提升问题

ES6 中的 map 和原生的对象有什么区别

原生的对象 Key 只支持字符串类型为 Key

sum(2, 3)实现 sum(2)(3)的效果

函数柯里化

说说你对以下几个页面生命周期事件的理解:DOMContentLoaded,load,beforeunload,unload

  • DOMContentLoaded 事件 —— DOM 已经就绪,因此处理程序可以查找 DOM 节点,并初始化接口。
  • load 事件 —— 外部资源已加载完成,样式已被应用,图片大小也已知了。
  • beforeunload 事件 —— 用户正在离开:我们可以检查用户是否保存了更改,并询问他是否真的要离开。
  • unload 事件 —— 用户几乎已经离开了,但是我们仍然可以启动一些操作,例如发送统计数据。

两个对象如何比较

变量作用域链

介绍各种异步方案

JS 里垃圾回收机制是什么,常用的是哪种,怎么处理的

[1, 2, 3, 4, 5]变成[1, 2, 3, a, b, 5]

取数组的最大值(ES5、ES6)

apply 和 call 的区别

ES5 和 ES6 有什么区别

some、every、find、filter、map、forEach 有什么区别

上述数组随机取数,每次返回的值都不一样

如何找 0-5 的随机数,95-99 呢

页面上有 1 万个 button 如何绑定事件

如何判断是 button

页面上生成一万个 button,并且绑定事件,如何做(JS 原生操作 DOM)

循环绑定时的 index 是多少,为什么,怎么解决

页面上有一个 input,还有一个 p 标签,改变 input 后 p 标签就跟着变化,如何处理

监听 input 的哪个事件,在什么时候触发

手写数组去重函数

手写数组扁平化函数

ES6 新的特性

prototype 和——proto——区别

constructor 是什么

new 是怎么实现的

发布-订阅和观察者模式的区别

JS 执行过程中分为哪些阶段

词法作用域和 this 的区别

平常是怎么做继承

深拷贝和浅拷贝

loadsh 深拷贝实现原理

ES6 中 let 块作用域是怎么实现的

打包时 Hash 码是怎么生成的

随机值存在一样的情况,如何避免

a,b 两个按钮,点击 aba,返回顺序可能是 baa,如何保证是 aba(Promise.then)

formData 和原生的 ajax 有什么区别

介绍下表单提交,和 formData 有什么关系

介绍异步方案

如何处理异常捕获

项目如何管理模块

前端性能优化

JS 继承方案

如何判断一个变量是不是数组

变量 a 和 b,如何交换

多个<li>标签生成的 Dom 结构是一个类数组

类数组和数组的区别

dom 的类数组如何转成数组

介绍箭头函数和普通函数的区别

介绍 defineProperty 方法,什么时候需要用到

for..in 和 object.keys 的区别

get 和 post 有什么区别

介绍 ES6 的功能

let、const 以及 var 的区别

浅拷贝和深拷贝的区别

介绍箭头函数的 this

介绍快速排序

算法:前 K 个最大的元素

ES6 使用的语法

JS 是什么范式语言(面向对象还是函数式编程)

进程和线程的区别(一个 node 实例就是一个进程,node 是单线程,通过事件循环来实现异步)

介绍下 DFS 深度优先

广度优先搜索 BFS 和深度优先搜索 DFS

介绍下观察者模式

观察者模式里面使用的数据结构(不具备顺序 ,是一个 list)

for in 与 for of 的区别

  • for of 是用来遍历哪些实现了 itertor 接口的对象(包含 Array, Set、Map、arguments、NodeList、TypedArray)
  • for in 用来无序遍历对象中除 Symbol 以外的可枚举的属性(包含原型链上的)

export 与 export default 的区别?

  • 在一个模块中 export 可以存在多个
  • export default : 只能存在一个

引用的时候

  • export 导出: 需要使用 { a }, * as JQuery

如何在 ES5 环境下实现 const

如何在 ES5 环境下实现 const