Skip to content

Javascript 类型

javascript 数据类型有哪些?

详细讲解:JavaScript 数据类型

一句话回答面试官:JavaScript 数据类型分为两种,基本数据类型和引用数据类型,基本数据类型包含 String、Numbers、Boolean、Null、Undefined,引用数据类型包含 Ojbect、Array、Function。

注意:面试官可能会二次提问基本数据类型和引用数据类型的区别。

基本数据类型和引用数据类型有什么区别?

详细讲解:以上两种数据类型的区别

一句话回答面试官:基本数据类型和引用数据类型的区别在于它们在内存中存储的方式不同,基本数据类型的数据是存储在栈中,而引用类型的数据是存储在堆中。引用类型在栈中存储的只是一个指针,最终指向堆中的数据。

什么是对象深拷贝和浅拷贝?

详细讲解:对象的浅拷贝和深拷贝

一句话回答面试官:对象的浅拷贝是指拷贝对象的第一层属性,而深拷贝则是拷贝多层属性。浅拷贝的方式可以通过遍历对象属性并赋值给新对象。深拷贝的方式主要有递归(深度优先搜索)或者是通过 JSON 类的 parse 和 stringify 实现。

注意:面试官可能会二次提问 JSON 类和递归的区别。

获取一个 dom 元素的方式有哪些?

详细讲解:访问节点

一句话回答面试官:通过 JavaScript 获取 dom 可以通过 id 的方式 document.getElementById、类名的方式 getElementsByClassName、标签名的方式 getElementsByName。比较通用的可以使用全能访问指定节点 querySelector 或者是全能访问所有节点 querySelectorAll。

什么是 javascript 单线程?

详细讲解:JavaScript 单线程

一句话回答面试官:JavaScript 单线程是指当存在多个任务的时候,所有的任务都必须排队且按顺序执行。JavaScript 一开始就被设计为单线程的工作模式,因为多线程的任务是同时执行的,不区分先后。当多个任务同时操作一个 dom 时就会容易出现问题。

注意:单线程的缺点必须要了解,避免被二次提问。以及多线程同时操作一个 dom 时具体会出现什么问题?

javascript 同步模式和异步模式有什么区别?

详细讲解:JavaScript 同步模式JavaScript 异步模式

一句话回答面试官:JavaScript 同步模式中任务都是排队按顺序执行的,需要等待上一个任务完成后才能执行下一个任务,如果上一个任务执行的时间过长,就会导致后面的任务都处于等待的状态,容易形成阻塞。 而异步任务则是为了解决该阻塞的问题而生,开启异步模式后,该任务无需要等待上一个任务执行完毕就可以执行。

注意:如果被提问什么是同步和异步模式,可以结合现实生活举例来讲解。

什么是 javascript 事件循环机制?

详细讲解:JavaScript 事件循环机制

一句话回答面试官:JavaScript 事件循环机制是指我们的代码在 JS 内部是如何运行的,首先我们整体 script 的代码会打包到一个匿名函数,然后添加到宏任务队列中去执行。代码是一行行往下执行的,如果遇到了宏任务的代码则会添加到宏任务队列中,如果遇到微任务的代码则会添加到微任务队列中。当前宏任务执行完毕后会开始执行所有微任务。微任务执行完毕后,浏览器开始接管进行页面渲染。渲染完毕后开始执行下一个宏任务,一直重复循环到所有宏任务执行完毕为止。

什么是面向对象编程?

详细讲解:面向对象编程

一句话回答面试官:在 JavaScript 中,面向对象编程可以理解成是一种思想,面向对象就是把现实世界中的事物抽象成程序世界中的类和对象。例如在现实世界中的人可以想象成一个对象,人包含了姓名、年龄属性, 包含了会吃饭、走路等动作。那么在代码中就可以用 Object 对象来记录人的这些属性和动作方法。

什么是原型以及原型链?

详细讲解:原型

一句话回答面试官:我们定义一个构造函数并且给它添加成员时,通常会用到 prototype 属性,这个就是我们平时所说的原型对象。新创建的实例会从该原型对象上继承它的成员。假设一个原型对象等于另外一个构造函数的实例,而那个实例的原型对象又等于了另外一个构造函数的实例,以此类推一层层递进,就构成了实例与原型的链条,就是所谓的原型链。

什么是作用域和作用域链?

详细讲解:作用域

一句话回答面试官:作用域代表你定义的变量,在某个区域中是否能访问到它。如果在函数内部定义了一个变量,通常在函数外部是无法访问的。如果你在全局作用域中定义了一个变量,那么你在 JavaScript 代码中的任何地方都能访问它。而作用域链就像在这个内部函数里面又有一个内部函数,当你在最里面的函数访问一个变量时,它会先在自己的局部作用域内查找是否有该变量,如果没有则往上一个作用域中查找,以此类推一层层往上查找,这个就是作用域链。

什么是闭包?

详细讲解:闭包

一句话回答面试官:例如函数内部定义的变量,在函数外部是无法访问的,但是可以通过闭包的方式搭建一个桥梁,让外部能够访问到你这个变量。并不是在函数内部直接 return 这个变量,这样是不能形成闭包的。而是要 return 一个函数,这个函数内部访问了该变量。

什么是 this 指向?

详细讲解:this 指向

一句话回答面试官:this 指向主要分为两种情况,一种是普通函数中的 this,另外一种是箭头函数中的 this。普通函数的 this 都是指向调用者,谁调用了该函数,this 就指向谁。而箭头函数中是没有 this 的,不管是谁调用,它的 this 始终指向上一层函数作用域中所在的对象。

什么是防抖和节流?

详细讲解:防抖和节流

一句话回答面试官:防抖和节流一般都是在优化用户体验上会用到,例如防抖可以让用户多次点击一个提交按钮时,只会触发最后一次点击。而节流则是在规定时间内只能触发第一次事件,后续的触发将会被忽略,直到计时结束。

什么是高阶函数?

详细讲解:高阶函数

一句话回答面试官:有两种情况都可以被定义为高阶函数,第一种是把函数作为参数传递给另外一个函数,第二种是把函数作为另一个函数的返回结果。使用高阶函数可以让这个函数变得更加灵活/也利于封装通用的功能。例如平时数组用到 forEach、map、sort 方法也是高阶函数。

什么是函数柯里化?

详细讲解:函数柯里化

一句话回答面试官:当一个函数有多个参数的时候先传递一部分参数并调用它,然后返回一个新的函数接收剩余的参数并返回结果。这样做的好处就是可以把部分公共参数缓存起来,方便后续调用时更加方便。

什么是数据结构&算法?

详细讲解:数据结构 & 算法

一句话回答面试官:常见的数据结构有数组、栈、队列、链表、集合、字典等,而常见的算法有深/广度优先搜索、冒泡排序这些。算法在我们程序当中是最重要的一个部分,指的是你写的代码的质量。就例如你做一道菜,数据结构就相当于锅碗瓢盆,而算法就是食谱,你做出来的菜好不好吃取决于食谱。

es6 新特性有哪些?

详细讲解:ES6 新特性

一句话回答面试官:比较常用的特性有块级作用域 let const、解构赋值、箭头函数、promise、async await、class 类、ESM 模块化。还新增了数据结构 Map 和 Set,以及数组和对象的一些扩展方法。

注意:面试官可能会二次提问 var let const 三者的区别。

let 和 const 有什么区别?

详细讲解:ES6 新特性-基础使用

一句话回答面试官:一般用 let 定义的变量都是可以对齐进行重新赋值的,而 const 定义的变量是不能被重新赋值的,对象的属性修改除外。主要解决了 let 被意外更改导致的错误。所以在平时开发中我们都是主用 const 副用 let 。这样会使得代码质量会提高,代码错误概率会减少。

什么是 Promise?

详细讲解:ES6 新特性-基础使用

一句话回答面试官:Promise 是一个异步的实现方案,通常用来延迟返回函数结果。promise 主要有三种状态,分别是等待、成功、失败。可以通过 .then .catch 来监听异步是成功还是是失败。

什么是 Async、Await?

详细讲解:ES6 新特性-基础使用

一句话回答面试官:Async、Await 可以理解为是 Promise 的语法糖,主要是让异步的代码写起来更像同步代码。其次也是解决了 Promise 的回调地狱问题。