一名【合格】前端工程师的自检清单

news2024/11/15 10:58:38

1.JavaScript规定了几种语言类型?

基本数据类型:number、string、boolean、null、undefined、symbol(es6)
对象引用类型:Array、Function、Object、RegExp、Error、Date

2.JavaScript对象的底层数据结构是什么?

JavaScript 对象的底层数据结构是哈希表(Hash Table)。在 JavaScript 中,对象是一种无序键值对的集合,其中键是字符串类型,值可以是任何类型。为了快速地访问和修改对象的属性,JavaScript 引擎使用了哈希表来实现对象。哈希表是一种基于键值对的数据结构,它通过将键映射为一个索引来实现快速的查找和插入操作。在 JavaScript 中,哈希表被称为对象的属性表。

3.Symbol类型在实际开发中的应用、可手动实现一个简单的Symbol?

Symbol 是 JavaScript 中的一种基本数据类型,用于表示独一无二的值。如果想手动实现一个简单的 Symbol,可以按照以下步骤进行:
(1)创建一个闭包,用于保存已经创建的 Symbol 值。
(2)在闭包中定义一个内部计数器,用于生成唯一的标识符。
(3)定义一个函数,用于创建新的 Symbol 值。
(4)在函数中生成一个唯一的标识符,并将其保存到闭包中。
(5)返回这个标识符。
下面是一个简单的实现示例:

const createSymbol = (() => {
  const symbols = {};
  let count = 0;
  return (description) => {
    const symbol = `Symbol(${description || ''})_${count++}`;
    symbols[symbol] = true;
    return symbol;
  };
})();
const symbol1 = createSymbol('foo');
const symbol2 = createSymbol('bar');
console.log(symbol1); // "Symbol(foo)_0"
console.log(symbol2); // "Symbol(bar)_1"
console.log(symbol1 === symbol2); // false

这个实现生成的 Symbol 值类似于 JavaScript 中的内置 Symbol 值,每个值都是唯一的并且不可变。但是需要注意的是,这个实现是不完整的,它没有实现 Symbol 的所有特性,比如说无法使用 typeof 操作符判断一个值是否为 Symbol。

4.JavaScript中的变量在内存中的具体存储形式?

在 JavaScript 中,变量的具体存储形式取决于变量的数据类型。基本数据类型的变量(如数字、字符串等)通常直接存储在栈中,而对象类型的变量(如数组、对象等)则存储在堆中,而变量名则存储在栈中,并指向相应的内存地址。函数作为一种特殊对象类型,也被存储在堆中。当变量被声明时,JavaScript 引擎会自动分配内存,并在变量赋值时将值存储在相应的内存位置。当变量不再被使用时,JavaScript 引擎会自动处理内存回收,以便释放不再使用的内存。

5.基本类型对应的内置对象,以及他们之间的装箱拆箱操作?

在 JavaScript 中,基本类型和对应的内置对象之间可以进行装箱和拆箱操作。装箱操作指的是将基本类型的值转换为对应的内置对象,拆箱操作则是将内置对象转换为基本类型的值。例如,可以使用以下方式进行装箱操作:

// 字符串装箱
const str = 'hello';
const strObj = new String(str);
// 数字装箱
const num = 123;
const numObj = new Number(num);
// 布尔值装箱
const bool = true;
const boolObj = new Boolean(bool);

可以使用以下方式进行拆箱操作:

// 字符串拆箱
const strObj = new String('hello');
const str = strObj.valueOf();
// 数字拆箱
const numObj = new Number(123);
const num = numObj.valueOf();
// 布尔值拆箱
const boolObj = new Boolean(true);
const bool = boolObj.valueOf();

需要注意的是,基本类型和对应的内置对象并不完全等价。例如,对于字符串类型,基本类型的值是不可变的,而字符串对象是可变的。因此,在进行比较时应该使用严格相等运算符"===" 而不是相等运算符。
由于 JavaScript 引擎在处理基本类型和对象类型时的内部实现方式不同,装箱和拆箱操作可能会产生一定的性能开销。因此,在开发中应尽量避免不必要的装箱和拆箱操作,尽量使用基本类型进行数值计算和比较操作。
JavaScript 是一种动态类型语言,它的变量可以存储不同类型的值,包括基本类型和对象类型。为了方便开发者在处理基本类型和对象类型时可以统一使用相同的语法和操作符,JavaScript 引入了装箱和拆箱操作。
装箱操作是将基本类型的值转换为对应的对象类型,这样就可以使用对象的方法和属性对其进行操作。例如,使用字符串对象的 length 属性获取字符串的长度。拆箱操作则是将对象类型转换为基本类型的值,这样就可以直接进行数值计算和比较操作。

如图通过装箱操作的对象可以调用对象的方法,字面量创建会报错

在这里插入图片描述

6.理解值类型和引用类型?

值类型的特点是它们的值在内存中占据独立的空间,每个变量在内存中都有自己的副本,因此它们之间的比较是按值比较的。
引用类型的特点是它们的值在内存中不是独立存在的,而是存储在内存中的对象中,变量保存的是对象的地址,因此它们之间的比较是按引用比较的。
当我们对值类型进行赋值时,会在内存中创建一个新的值,变量指向这个新的值。而对引用类型进行赋值时,只是将变量指向内存中的对象,而不是创建一个新的对象。
理解值类型和引用类型对于理解 JavaScript 中的变量赋值、函数参数传递、对象属性访问等操作非常重要。

7.null和undefined的区别?

在JavaScript中,null和undefined是两个不同的值,它们有以下区别:

  1. undefined表示一个变量没有被定义或者没有被赋值,而null表示变量被显式地赋值为null。
  2. 如果一个函数没有返回值,它将默认返回undefined,而不是null。
  3. 当使用==,运算符时,null和undefined被认为是相等的,但当使用===运算符时,它们被认为是不相等的。
  4. 当访问对象的属性时,如果属性不存在,将返回undefined,而不是null。
    总之,null表示一个空值,而undefined表示一个未定义的值。

8.至少可以说出三种判断JavaScript数据类型的方式,以及他们的优缺点,如何准确的判断数组类型?

  1. typeof 运算符:可以用来判断大多数基本数据类型,返回值为字符串。例如:typeof 123 返回 “number”,typeof “hello” 返回 “string”。
    原理:typeof 运算符返回一个字符串,表示未经计算的操作数的类型。它对于大多数基本数据类型都可以正确判断,但对于 null 和一些对象类型如 Date、Array 等则有限制。
  2. instanceof 运算符:可以用来判断对象的具体类型,返回值为布尔值。例如:[] instanceof Array 返回 true,new Date() instanceof Date 返回 true。
    原理:instanceof 运算符通过判断一个对象是否是某个构造函数的实例来判断其类型。例如,[] instanceof Array 表示空数组 [] 是否是 Array 构造函数的实例,如果是则返回 true,否则返回 false。
  3. Object.prototype.toString 方法:可以用来判断大多数数据类型,返回值为字符串。例如:Object.prototype.toString.call([]) 返回 “[object Array]”,Object.prototype.toString.call({}) 返回 “[object Object]”。
    原理:Object.prototype.toString 方法返回一个表示对象的字符串,其中 [object Type] 中的 Type 表示对象的具体类型。通过使用 call 方法可以将该方法应用于不同的对象。
  4. Array.isArray 方法:可以用来判断是否为数组类型,返回值为布尔值。例如:Array.isArray([]) 返回 true,Array.isArray({}) 返回 false。
    原理:Array.isArray 方法用于判断一个对象是否为数组类型。如果是数组则返回 true,否则返回 false。

9.可能发生隐式类型转换的场景以及转换原则,应如何避免或巧妙应用?

Number.toString()
String(null) // 'null'
String(undefined) // 'undefined'

Number('123') // 123
Number(null) // 0
Number(false) // 0
Number('') // 0
Number(true) // 1
parseFloat('111.111.111')  // 111.111
Number(undefined) // NaN
Number('a') // NaN
parseFloat('a111.111') // NaN

Bollean(0) // false
Bollean('') // false
Bollean(null) // false
Bollean(NaN) // false
Bollean(undefined) // false
// +
'1' + 1 // '11'
'a' + 1 // 'a1'

// -、*、/、%
1 - '2' // -1
1 - 'a' // NaN
1 * '2' // 2
1 * 'a' // NaN
1 / '2' // 2
1 / 'a' // NaN
1 % '2' // 2
1 % 'a' // NaN

// ==
'' == false // 0 == 0 true
0 == false // 0 == 0 true

10.出现小数精度丢失的原因,JavaScript可以存储的最大数字、最大安全数字,JavaScript处理大数字的方法、避免精度丢失的方法?

作者:ConardLi
链接:https://juejin.cn/post/6844903830887366670
来源:稀土掘金

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

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

相关文章

甄云科技对话格瑞德,探讨高复杂度采购事业的数“智”解决之道

在由甄云科技主办的客户高层访谈节目“甄知访谈”中,本期我们走进山东格瑞德集团,一起来分享格瑞德的采购数字化转型之路。由甄云科技总裁姚一鸣对话格瑞德集团有限公司供应链总经理徐涵先生。 山东格瑞德集团成立于 1993 年,是一家围绕人工…

[pgrx开发postgresql数据库扩展]7.返回序列的函数编写(2)表序列

前文再续,书接上一回。 上一节我们简单说了利用SetOfIterator返回一个srf(Set Returning Functions),但是很多情况下,一个单值序列并不能很好的满足我们的需求,所以今天我们来说另外一个作用更广泛的srf&a…

您有一条群邀请消息:施耐德电气“绿色智能制造创赢计划”第四季正式启动!

4月26日,由工业和信息化部国际经济技术合作中心与施耐德电气共同主办的“2023绿色智能制造创赢计划”第四季正式启动 。 这一计划为拥有**技术专长与发展潜力的中小企业提供联合共创平台,帮助企业加速突破工业场景中的关键痛点,孵化和落地更…

GDB调试-从安装到使用

1、GDB简介 gdb 工具是 GNU 项目调试器,基于命令行。和其他的调试器一样,我们可以使用 gdb 来一行行的运行程序、单步执行、跳入/跳出函数、设置断点、查看变量等等,它是 UNIX/LINUX 操作系统下强大的程序调试工具。对于一般的Linux桌面系统(…

Nginx:worker_processes、worker_connections设置

转自:Nginx:worker_processes、worker_connections设置_worker_connections设置多少_it_zhenxiaobai的博客-CSDN博客 worker_processes与worker_connections 设置好合适大小,可以提升 nginx 处理性能,非常重要。 原作者的话&…

【PSO-LSTM】基于PSO优化LSTM网络的电力负荷预测(Python代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

eSIM证书要求-涉及规范SGP.22-SGP.26-2

subjectPublicKeyInfo 证书链中所有证书的subjectPublicKeyInfo中的OID都是一样的 CRL Distribution Point 证书吊销列表分发点 (CRL Distribution Point ,简称 CDP) 是含在数字证书中的一个可以共各种应用软件自动下载的最新的 CRL 的位置信息。一个 CDP 通常出现…

egg.js + mysql + windows 踩坑全纪录

资料: egg.js文档(https://www.eggjs.org/zh-CN/intro/quickstart) 背景:前面的都很简单,按照官方文档配置即可,全部调通以后,开始接触数据库mysql 因为米有后台开发背景,所以需要从…

从IDC数据库安全报告,看OceanBase安全能力

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/ 作为数据的承载工具,数据库自身安全能力对于数据安全至关重要。数据库软件诞生至今,经过了几十年的发展和演进,已经成为 IT 系统中不可或缺的关键技术。但是随着…

MySQL原理(三):索引

前言 上一篇介绍了 MySQL 的逻辑架构和执行过程,这一篇将介绍索引相关的内容。 索引是用额外的数据结构,来实现快速检索目标数据的。就像字典当中的目录一样,用额外的空间来存储部分内容,从而加快检索速度。 MySQL 的逻辑架构分…

Python——PyQt5在PyCharm的配置与应用(保姆级教程)

目录 一、安装pycharm与python版本 二、升级pip与换源,安装PyQt5、PyQt5-tool 三、添加环境变量 四、在pycharm的外部工具里添加3个工具 4.1、添加三个插件(重点) 五、如何使用QtDesigner 六、如何使用pyuic5 一、安装pycharm与python版…

C语言——扫雷小游戏(递归展开版)

哈喽,大家好,上次我们已经学习了三子棋小游戏,今天我们来学习扫雷小游戏了。 目录 1.游戏介绍 2.函数部分 2.1菜单 2.2game()函数 2.3mian()函数 2.4初始化棋盘 2.5打印棋盘 2.6布置雷 2.7排查雷 2.8统计雷 2.9递归,展开一片区域 …

眼球追踪、HDR、VST,从代码挖掘Valve下一代VR头显

擅长爆料、挖掘线索的Brad Lynch,此前发布了Quest Pro等设备的线索文章引发关注。​近期,又公布一系列与“Valve Deckard”VR头显相关消息,比如支持眼球追踪、HDR、VST透视、Wi-Fi网络等等。在SteamVR 1.26.1测试版更新、Steam用户端、Gamesc…

lazada、shopee转化率低怎么办?做好这几点,让你的店铺转化率提升

如若lazada, shopee如果转化率低,商家需要做好以下几个方面,通过以下几点来提高。毕竟只有流量没有转化率,店铺管理不好。 1、产品类别的选择 一个好的类别本身就是一个很好的排水渠道,可以给我们带来大量的流量,高流…

数据结构与算法基础(王卓)(38):排序、全部PPT、笔记整理

首先,庆祝本系列完结撒花! 对了,后续应该会把王卓老师所有的PPT附带笔记全部打包上传百度云 回头我把链接贴出来,感兴趣的朋友可以Mark一下,希望可以帮助到大家 如果有什么写的不对的地方,先给大家说声抱…

23年的软件测试前景?我卷自动化测试卷出头了,拿下22K*15薪...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 测试工程师主要干…

Linux一学就会——管道通信

管道通信 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件&…

通过计算系统稳定性比较迭代次数

有一类差值结构可能有一行中的数字比其他行的都多,因此有天然的底部,很容易确定平均列的顺序。但是可能有的差值结构相同的底部不止一个,这次比较双底部差值结构迭代次数的顺序。 ( A, B )---3*30*2---( 1, 0 )( 0, 1 ) 让网络的输入有3个节…

2023年US News最佳MBA排名出炉,申请需要哪些条件?

在出国留学的大环境下,MBA文凭一直都非常受欢迎,美国商学院是中国学生热衷的留学方向,而针对管理者的MBA项目也受到追捧。 US News 统计了美国130个全日制MBA的毕业生起薪,2023年毕业生的平均工资为 $105,684,Top 10 …

纽扣电池/含纽扣电池商品亚马逊美国澳洲站点合规认证要求!

纽扣电池/含纽扣电池商品亚马逊美澳站点合规认证 亚马逊美国站纽扣电池(含纽扣电池产品)合规要求标准: 16CFR1700.15部分(防毒包装标准) 16CFR1700.20部分(特殊包装的检测程序) ANSI C18.3M(便携式锂原电池的安全标准) 警示标签声明要求(…