2023年前端面试汇总 - JavaScript

news2024/11/24 16:45:57

1. 数据类型

1.1. JavaScript有哪些数据类型,它们的区别?

JavaScript共有八种数据类型,分别是 Undefined、Null、Boolean、Number、String、Object、Symbol、BigInt。

其中 Symbol 和 BigInt 是ES6 中新增的数据类型:

Symbol 代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。

BigInt 是一种数字类型的数据,它可以表示任意精度格式的整数,使用 BigInt 可以安全地存储和操作大整数,即使这个数已经超出了 Number 能够表示的安全整数范围。

这些数据可以分为原始数据类型和引用数据类型:

栈:原始数据类型(Undefined、Null、Boolean、Number、String)

堆:引用数据类型(对象、数组和函数)

两种类型的区别在于存储位置的不同:

原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储;

引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定。如果存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

堆和栈的概念存在于数据结构和操作系统内存中,在数据结构中:

在数据结构中,栈中数据的存取方式为先进后出。

堆是一个优先队列,是按优先级来进行排序的,优先级可以按照大小来规定。

在操作系统中,内存被分为栈区和堆区:

栈区内存由编译器自动分配释放,存放函数的参数值,局部变量的值等,其操作方式类似于数据结构中的栈。

堆区内存一般由开发着分配释放,若开发者不释放,程序结束时可能由垃圾回收机制回收。

1.2. 数据类型检测的方式有哪些?

1.2.1. typeof

console.log(typeof 2);               // number
console.log(typeof true);            // boolean
console.log(typeof 'str');           // string
console.log(typeof []);              // object    
console.log(typeof function(){});    // function
console.log(typeof {});              // object
console.log(typeof undefined);       // undefined
console.log(typeof null);            // object

其中数组、对象、null都会被判断为object,其他判断都正确。

1.2.2. instanceof

instanceof可以正确判断对象的类型,其内部运行机制是判断在其原型链中能否找到该类型的原型。

console.log(2 instanceof Number);                    // false
console.log(true instanceof Boolean);                // false 
console.log('str' instanceof String);                // false 
 
console.log([] instanceof Array);                    // true
console.log(function(){} instanceof Function);       // true
console.log({} instanceof Object);                   // true

可以看到,instanceof 只能正确判断引用数据类型,而不能判断基本数据类型。instanceof 运算符可以用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性。

1.2.3. constructor

console.log((2).constructor === Number);               // true
console.log((true).constructor === Boolean);           // true
console.log(('str').constructor === String);           // true
console.log(([]).constructor === Array);               // true
console.log((function() {}).constructor === Function); // true
console.log(({}).constructor === Object);              // true

constructor有两个作用,一是判断数据的类型,二是对象实例通过 constrcutor 对象访问它的构造函数。需要注意,如果创建一个对象来改变它的原型,constructor就不能用来判断数据类型了:

function Fn(){};
 
Fn.prototype = new Array();
 
var f = new Fn();
 
console.log(f.constructor===Fn);    // false
console.log(f.constructor===Array); // true

1.2.4. Object.prototype.toString.call()

Object.prototype.toString.call() 使用 Object 对象的原型方法 toString 来判断数据类型:

var a = Object.prototype.toString;
 
console.log(a.call(2));
console.log(a.call(true));
console.log(a.call('str'));
console.log(a.call([]));
console.log(a.call(function(){}));
console.log(a.call({}));
console.log(a.call(undefined));
console.log(a.call(null));

同样是检测对象obj调用toString方法,obj.toString()的结果和Object.prototype.toString.call(obj)的结果不一样,这是为什么?

这是因为toString是Object的原型方法,而Array、function等类型作为Object的实例,都重写了toString方法。不同的对象类型调用toString方法时,根据原型链的知识,调用的是对应的重写之后的toString方法(function类型返回内容为函数体的字符串,Array类型返回元素组成的字符串…),而不会去调用Object上原型toString方法(返回对象的具体类型),所以采用obj.toString()不能得到其对象类型,只能将obj转换为字符串类型;因此,在想要得到对象的具体类型时,应该调用Object原型上的toString方法。

1.3. 判断数组的方式有哪些?

1.4. null和undefined区别?

1.5. typeof null 的结果是什么,为什么?

1.6. intanceof 操作符的实现原理及实现

1.7. 为什么0.1+0.2 ! == 0.3,如何让其相等

1.8. 如何获取安全的 undefined 值?

1.9. typeof NaN 的结果是什么?

1.10. isNaN 和 Number.isNaN 函数的区别?

1.11. == 操作符的强制类型转换规则?

1.12. 其他值到字符串的转换规则?

1.13. 其他值到数字值的转换规则?

1.14. 其他值到布尔类型的值的转换规则?

1.15. || 和 && 操作符的返回值?

1.16. Object.is() 与比较操作符 "=","" 的区别?

1.17. 什么是 JavaScript 中的包装类型?

1.18. JavaScript 中如何进行隐式类型转换?

1.19. +操作符什么时候用于字符串的拼接?

1.20. 为什么会有Bigint的提案?

1.21. object.assign和扩展运算法是深拷贝还是浅拷贝,两者有什么区别?

2. ES6

2.1. let、const、var的区别?

2.2. const对象的属性可以修改吗?

2.3. 如果new一个箭头函数的会怎么样?

2.4. 箭头函数与普通函数的区别

2.5. 箭头函数的this指向哪⾥?

2.6. 扩展运算符的作用及使用场景

2.7. Proxy 可以实现什么功能?

2.8. 对对象与数组的解构的理解

2.9. 如何提取高度嵌套的对象里的指定属性?

2.10. 对 rest 参数的理解

2.11. ES6中模板语法与字符串处理

3. JavaScript基础

3.1. new操作符的实现原理

3.2. map和Object的区别

3.3. map和weakMap的区别

3.4. JavaScript有哪些内置对象

3.5. 常用的正则表达式有哪些?

3.6. 对JSON的理解

3.7. JavaScript脚本延迟加载的方式有哪些?

3.8. JavaScript 类数组对象的定义?

3.9. 数组有哪些原生方法?

3.10. Unicode、UTF-8、UTF-16、UTF-32的区别?

3.11. 常见的位运算符有哪些?其计算规则是什么?

3.12. 为什么函数的 arguments 参数是类数组而不是数组?如何遍历类数组?

3.13. 什么是 DOM 和 BOM?

3.14. 对类数组对象的理解,如何转化为数组?

3.15. escape、encodeURI、encodeURIComponent 的区别

3.16. 对AJAX的理解,实现一个AJAX请求

3.17. JavaScript为什么要进行变量提升,它导致了什么问题?

3.18. 什么是尾调用,使用尾调用有什么好处?

3.19. ES6模块与CommonJS模块有什么异同?

3.20. 常见的DOM操作有哪些?

3.21. use strict是什么意思 ? 使用它区别是什么?

3.22. 如何判断一个对象是否属于某个类?

3.23. 强类型语言和弱类型语言的区别

3.24. 解释性语言和编译型语言的区别

3.25. for…in和for…of的区别

3.26. 如何使用for…of遍历对象

3.27. ajax、axios、fetch的区别

3.28. 数组的遍历方法有哪些?

3.29. forEach和map方法有什么区别?

4. 原型与原型链

4.1. 对原型、原型链的理解

4.2. 原型修改、重写

4.3. 原型链指向

4.4. 原型链的终点是什么?如何打印出原型链的终点?

4.5. 如何获得对象非原型链上的属性?

5. 执行上下文/作用域链/闭包

5.1. 对闭包的理解

5.2. 对作用域、作用域链的理解

5.3. 对执行上下文的理解

6. this/call/apply/bind

6.1. 对this对象的理解

6.2. call() 和 apply() 的区别?

6.3. 实现call、apply 及 bind 函数

7. 异步编程

7.1. 异步编程的实现方式?

7.2. setTimeout、Promise、Async/Await 的区别

7.3. 对Promise的理解

7.4. Promise的基本用法

7.5. Promise解决了什么问题

7.6. Promise.all和Promise.race的区别的使用场景

7.7. 对async/await 的理解

7.8. await 到底在等啥?

7.9. async/await的优势

7.10. async/await对比Promise的优势

7.11. async/await 如何捕获异常

7.12. 并发与并行的区别?

7.13. 什么是回调函数?回调函数有什么缺点?如何解决回调地狱问题?

7.14. setTimeout、setInterval、requestAnimationFrame 各有什么特点?

8. 面向对象

8.1. 对象创建的方式有哪些?

8.2. 对象继承的方式有哪些?

9. 垃圾回收与内存泄漏

9.1. 浏览器的垃圾回收机制

9.2. 哪些情况会导致内存泄漏

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/663350.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

避开这12个压测误区保证有效压测

压测本质上其实就是经验的问题,至于技术我认为现在都是配套了,也有人配套的东西也搞不清,那还是经验的问题。提醒下,这篇对野路子玩压测的人蛮有用的。 一、压测的误区 首先讲压测误区,每个误区我会简单的总结下&…

作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配

正在成为组织运营标配的流程挖掘,到底有哪些商业价值? 作为超级自动化的重要先驱,流程挖掘正在成为组织运营标配 文/王吉伟 AIGC正在影响越来越多的行业,流程挖掘领域亦不例外。 Mindzie首先宣布集成生成式AI,使用户…

带你详细了解Redis事务锁机制-加实列演示-上

Redis_事务_锁机制_秒杀 Redis 的事务是什么? 1、Redis 事务是一个单独的隔离操作:事务中的所有命令都会序列化、按顺序地执行 2、事务在执行的过程中,不会被其他客户端发送来的命令请求所打断 3、Redis 事务的主要作用就是串联多个命令防止别的命令…

怎么学习和提升前端开发的能力? - 易智编译EaseEditing

要学习和提升前端开发的能力,您可以按照以下步骤进行: 掌握基础知识: 了解HTML、CSS和JavaScript的基本概念和语法。学习HTML用于创建网页结构,CSS用于样式设计和布局,JavaScript用于交互和动态效果。 学习框架和库&…

探讨太阳能热水器的安全隐患和雷电防护措施

太阳能热水器是指利用太阳光加热原理来获得热水的装置。随着科学技术的发展,太阳能热水器因其新颖、环保、节能且方便而深受消费者的喜爱,安装数量逐年增加。我国太阳能资源丰富,尤其是在广袤的西部中小城镇、农村地区,家家户户几…

NSSA实验和配置命令

1)拓扑 需求 2)需求:PC2和PC5互通 配置思路和配置命令 3)配置思路: 第一步:先让R1能够和PC5互通,要先配置静态路由 [R1] ip route-static 192.168.4.0 24 192.168.18.8 第二步:在R8上写去往PC1/PC2的路…

定长图文验证码模型训练

文章目录 自定义数据集生成模型代码计算均值和标准差训练代码测试集成功率计算推理测试 市面上常见的验证码识别方案包括: 基于规则的方案:这种识别方案针对一些特定类型的验证码(如数字、字母组合),利用编写规则的方式…

逛开发者集市啦,ShardingSphere 在亚马逊云科技中国峰会等你!

2023亚马逊云科技中国峰会将于6月27日-28日在上海世博中心盛大开幕。本次峰会以“共见价值成就”为主题,与合作伙伴展望云计算趋势及合作发展战略,分享行业解决方案,共同探讨协同销售策略和全新的 APN 计划,助力合作伙伴成就更多价…

计算机系统层次结构与操作系统和驱动的定义

一、程序分类 程序按其运行环境分为: 裸机程序:直接运行在对应硬件上的程序 应用程序:只能运行在对应操作系统上的程序 二、计算机系统的层次结构 计算机系统两种层次结构: 2.1 无操作系统的简单的两层结构 2.2 有操作系统的…

华为云物联网平台微信小程序开发教程2.0【完整详细教程】

一、简介 在之前曾发布过一篇文章“华为云物联网平台的微信小程序开发”,在最近接到部分用户私信在使用开发过程中出现的问题,例如API访问的"401"现象等问题,在重新查看上面的文章教程时发现教程内容的步骤不详细,现对教…

Postman快速入门(一)

一、基本介绍 postman是一款流程的接口调试工具,其特点就是使用简单,功能强大。使用角色也非常广泛,后端开发,前端人员,测试人员都可以使用它进行接口调试或测试。 下图是基本功能介绍 发送第一个请求 如果你是第一次…

人工智能如何彻底改变 SaaS 格局

人工智能 (AI) 正在颠覆几乎所有行业,并正在改变我们开展业务的方式。近年来,SaaS 行业一直是受影响最大的行业之一,人工智能在其指数级增长中发挥着至关重要的作用。在本文中,我们将详细讨论实施 AI 对 SaaS 产品的增长和开发有何…

C++拷贝构造函数

文章目录 拷贝构造函数是一个c的默认成员函数,它是用来拷贝对象的,当你想修改对象,但是又不想修改它本身,那么可以将其拷贝给一个对象对这个拷贝出来的对象进行操作 拷贝构造函数语法:类名(const 类名&…

Java-API简析_java.util.StringTokenizer类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) https://blog.csdn.net/m0_69908381/article/details/131293596 出自【进步*于辰的博客】 其实我的【Java-API】专栏内的博文对大家来说意义是不大的。…

设计模式之——单例模式

✍🏼作者:周棋洛,计算机学生 ♉星座:金牛座 🏠主页:点击学习更多 🌐关键:JavaScript 单例 设计模式 单例模式的定义是:保证一个类仅有一个实例,并提供一个访问…

【操作系统】程序运行环境

目录 1.处理器运行模式 1.1特权指令 1.2非特权指令 2.中断和异常的概念 2.1中断和异常的定义 2.1.1外中断 2.1.2内中断(异常) 2.2中断和异常的处理过程 3.系统调用 1.处理器运行模式 计算机系统中,通常 CPU 执行两种不同性质的程序:一…

【Android开发基础】手机传感器信息的获取

文章目录 一、引言二、了解1、概述2、关键 三、设计1、UI设计(1)主界面(2)适配器item 2、编码(1)获取数据(传感器信息)(2)渲染数据(初始化适配器&…

SpringBoot不在使用@Validated 做参数校验但是不想在Controller层怎么办?

目录 场景再现: 怎么做? 遇到了什么问题? 怎么实现? 场景再现: 某API接口接受加密的json字符串,接受字符串之后先进行解密处理,解密完成之后还要进行参数校验处理,如果参数不合规…

华为HCIA备考(数通) 易错题整理 PART1

1.IEEE802.1Q定义的 VLAN 帧格式中VLAN ID总共有多少bit 答:12 2.NAPT允许多个私有IP地址通过不同的端口号映射到同一个公有IP地址上,且不需要做任何关于端口号的配置。 3.IEEE802.1Q定义的VLAN帧总长度为多少字节? 答:4 4.关于…

2023亚马逊云科技中国峰会:强化学习探索—— Amazon DeepRacer

1️⃣前言 Amazon DeepRacer 是一个综合性的学习系统,可供各个水平的用户用来学习和探索强化学习以及试验和构建自动驾驶应用程序。 2️⃣Amazon DeepRacer 介绍 DeepRacer是一款小型自主驾驶车辆,它结合了深度学习、强化学习和云计算等技术&#xff0c…