本文主要是介绍面试 JavaScript 框架八股文十问十答第四期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
面试 JavaScript 框架八股文十问十答第四期
作者:程序员小白条,个人博客
相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!
⭐点赞⭐收藏⭐不迷路!⭐
1)new操作符的实现原理
new
操作符用于创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。其主要步骤包括:
- 创建一个新对象。
- 将构造函数的作用域赋给新对象(因此
this
就指向了这个新对象)。 - 执行构造函数中的代码,为这个新对象添加属性。
- 返回新对象。
实现原理示例:
function myNew(constructor, ...args) {const obj = Object.create(constructor.prototype); // 创建一个新对象并将构造函数的原型赋给它const result = constructor.apply(obj, args); // 执行构造函数,将构造函数的作用域绑定到新对象上return typeof result === 'object' ? result : obj; // 返回新对象或构造函数的返回值
}
2)map和Object的区别
- 键类型:
Map
的键可以是任意数据类型,包括基本类型和引用类型。Object
的键只能是字符串或者 Symbol。
- 键值对顺序:
Map
会记住键值对的插入顺序,迭代时会按照插入顺序返回。Object
不会保留插入顺序,属性的顺序可能会在不同的引擎或不同的环境下变化。
- 大小:
Map
的大小可以通过size
属性获取。Object
的大小需要手动计算属性的数量。
- 原型:
Map
对象有一个指向Map
构造函数的原型的链。Object
对象有一个指向Object
构造函数的原型的链。
3)map和weakMap的区别
- 引用关系:
Map
中键是强引用,不会被垃圾回收器回收。WeakMap
中键是弱引用,如果没有其他引用指向键,键可能会被垃圾回收器回收。
- 迭代与枚举:
Map
可以遍历并枚举其键值对。WeakMap
不提供对其键的枚举功能,因为键是弱引用,不可枚举。
- 性能:
WeakMap
在存储大量键值对时可能比Map
更高效,因为它允许被垃圾回收。
4)JavaScript有哪些内置对象
JavaScript 的内置对象包括但不限于:
- 全局对象:
Object
,Function
,Array
,String
,Number
,Boolean
,Symbol
,Date
,RegExp
等。 - Error 对象:
Error
,SyntaxError
,TypeError
,ReferenceError
,RangeError
,EvalError
,URIError
等。 - 数据结构:
Map
,Set
,WeakMap
,WeakSet
等。 - 其他对象:
Math
,JSON
,Promise
,Proxy
,Reflect
等。
5)常用的正则表达式有哪些?
常用的正则表达式包括但不限于:
-
匹配邮箱地址:
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
-
匹配 URL:
/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/
-
匹配 IP 地址:
/^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$/
-
匹配手机号码(中国大陆):
/^(?:(?:\+|00)86)?1[3-9]\d{9}$/
-
匹配日期(YYYY-MM-DD):
/^\d{4}-\d{2}-\d{2}$/
这些正则表达式可以用于验证输入的数据是否符合特定的格式。
6)对JSON的理解
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它基于 JavaScript 对象的语法,但与之不完全相同。JSON 是一种文本格式,可以在不同的编程语言之间进行数据交换。它具有以下特点:
- 易于阅读和编写: JSON 使用人类可读的文本。
- 数据结构简单: JSON 支持基本数据类型,如字符串、数字、布尔值,以及数组和对象。
- 独立于编程语言: JSON 是一种语言无关的格式,可以在不同的编程语言中进行解析和生成。
7)JavaScript脚本延迟加载的方式有哪些?
延迟加载 JavaScript 脚本有以下方式:
defer
属性: 使用<script defer src="script.js"></script>
,延迟加载脚本,直到文档解析完成才执行。- 动态创建
<script>
元素: 使用 JavaScript 动态创建<script>
元素,设置其src
属性并将其插入到 DOM 中。 async
属性: 使用<script async src="script.js"></script>
,异步加载脚本,下载完成后立即执行,但不会阻塞文档解析。
8)JavaScript 类数组对象的定义?
类数组对象是具有数组特性(例如可通过索引访问元素、具有 length
属性)但不是真正的数组的对象。常见的类数组对象包括函数的 arguments
对象、DOM 元素列表等。它们虽然类似于数组,但通常没有数组的方法,如 forEach
、map
等。
9)数组有哪些原生方法?
JavaScript 数组具有许多原生方法,包括但不限于:
- 修改数组:
push()
,pop()
,shift()
,unshift()
,splice()
,reverse()
,sort()
. - 连接与拆分:
concat()
,join()
,slice()
. - 遍历数组:
forEach()
,map()
,filter()
,reduce()
,reduceRight()
,every()
,some()
,find()
,findIndex()
. - 操作数组:
indexOf()
,lastIndexOf()
,includes()
,fill()
,copyWithin()
.
10)Unicode、UTF-8、UTF-16、UTF-32的区别?
- Unicode: Unicode 是一种字符集,它为每个字符分配了一个唯一的数字(码点),以便在各种平台、程序和语言中进行统一的字符编码。Unicode 字符集中包含了世界上几乎所有的字符。
- UTF-8: UTF-8 是一种变长字符编码方案,它可以用来编码 Unicode 字符集中的字符。UTF-8 使用 1 至 4 个字节表示每个字符,对于英文字符使用 1 个字节,而对于中文或其他国际字符可能使用多个字节。
- UTF-16: UTF-16 也是一种变长字符编码方案,用来编码 Unicode 字符集。UTF-16 使用 2 或 4 个字节表示每个字符,对于基本多文种平面(BMP)中的字符(U+0000 至 U+FFFF)使用 2 个字节,而对于辅助平面中的字符可能使用 4 个字节。
- UTF-32: UTF-32 是一种固定长度的字符编码方案,每个字符使用 4 个字节表示。UTF-32 中的每个编码单元都直接对应一个 Unicode 码点,因此它可以完全覆盖 Unicode 字符集。
总的来说,UTF-8、UTF-16 和 UTF-32 是不同的字符编码方案,用来实现 Unicode 字符集的编码和表示,它们的主要区别在于字符编码的方式和存储长度。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
已 300 + Star!
⭐点赞⭐收藏⭐不迷路!⭐
这篇关于面试 JavaScript 框架八股文十问十答第四期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!