面试 JavaScript 框架八股文十问十答第四期

2024-02-06 19:12

本文主要是介绍面试 JavaScript 框架八股文十问十答第四期,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

面试 JavaScript 框架八股文十问十答第四期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)new操作符的实现原理

new 操作符用于创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。其主要步骤包括:

  1. 创建一个新对象。
  2. 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)。
  3. 执行构造函数中的代码,为这个新对象添加属性。
  4. 返回新对象。

实现原理示例:

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 脚本有以下方式:

  1. defer 属性: 使用 <script defer src="script.js"></script>,延迟加载脚本,直到文档解析完成才执行。
  2. 动态创建 <script> 元素: 使用 JavaScript 动态创建 <script> 元素,设置其 src 属性并将其插入到 DOM 中。
  3. async 属性: 使用 <script async src="script.js"></script>,异步加载脚本,下载完成后立即执行,但不会阻塞文档解析。

8)JavaScript 类数组对象的定义?

类数组对象是具有数组特性(例如可通过索引访问元素、具有 length 属性)但不是真正的数组的对象。常见的类数组对象包括函数的 arguments 对象、DOM 元素列表等。它们虽然类似于数组,但通常没有数组的方法,如 forEachmap 等。

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 框架八股文十问十答第四期的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/685274

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

Java中的.close()举例详解

《Java中的.close()举例详解》.close()方法只适用于通过window.open()打开的弹出窗口,对于浏览器的主窗口,如果没有得到用户允许是不能关闭的,:本文主要介绍Java中的.... 目录当你遇到以下三种情况时,一定要记得使用 .close():用法作用举例如何判断代码中的 input

Spring Gateway动态路由实现方案

《SpringGateway动态路由实现方案》本文主要介绍了SpringGateway动态路由实现方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录前沿何为路由RouteDefinitionRouteLocator工作流程动态路由实现尾巴前沿S

JavaScript对象转数组的三种方法实现

《JavaScript对象转数组的三种方法实现》本文介绍了在JavaScript中将对象转换为数组的三种实用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录方法1:使用Object.keys()和Array.map()方法2:使用Object.entr

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

Java高效实现PowerPoint转PDF的示例详解

《Java高效实现PowerPoint转PDF的示例详解》在日常开发或办公场景中,经常需要将PowerPoint演示文稿(PPT/PPTX)转换为PDF,本文将介绍从基础转换到高级设置的多种用法,大家... 目录为什么要将 PowerPoint 转换为 PDF安装 Spire.Presentation fo