JavaScript包装类型

前端面试大全·JavaScript包装类型

🌟经典真题

🌟包装类型

🌟真题解答

🌟总结


🌟经典真题

  • 是否了解 JavaScript 中的包装类型?

🌟包装类型

在 ES 中,数据的分类分为基本数据类型引用类型

按照最新 ES 标准定义,基本数据类型(primitive value)包括 undefined、null、boolean、number、symbol、string

引用类型包括 Object、Array、Date、RegExp 等。

基本数据类型和引用类型这两个类型其中一个很明显的区别是,引用类型有自己内置的方法,也可以自定义其他方法用来操作数据,而基本数据类型不能像引用类型那样有自己的内置方法对数据进行更多的操作。

但基本数据类型真的就不能使用方法吗?对于部分基本类型来说确实是这样的。

但是有 3 个是 ES 提供了对应的特殊引用类型(包装类型)Boolean、Number、String

基本包装类型,和其他引用类型一样,拥有内置的方法可以对数据进行额外操作。如下:

var str = 'hello'; // string 基本类型
var s2 = str.charAt(0);
console.log(s2); // h

上面的 string 是一个基本类型,但是它却能调用 charAt( ) 的方法。

其主要是因为在执行第二行代码时,后台会自动进行下面的步骤:

  1. 自动创建 String 类型的一个实例(和基本类型的值不同,这个实例就是一个基本包装类型的对象)
  2. 调用实例(对象)上指定的方法
  3. 销毁这个实例

用代码的方式解释就是如下:

//我们平常写程序的过程:
var str = 'hello'; // string 基本类型
var s2 = str.charAt(0); // 在执行到这一句的时候 后台会自动完成以下动作 :
(var _str = new String('hello'); // 1 找到对应的包装对象类型,然后通过包装对象创建出一个和基本类型值相同的对象var s2 = _str.charAt(0); // 2 然后这个对象就可以调用包装对象下的方法,并且返回结给 s2._str = null;  //    3 之后这个临时创建的对象就被销毁了, str =null; 
)
console.log(s2); // h 
console.log(str); // hello

基本类型的值虽然没有方法可以调用,但是后台临时创建的包装对象上有内置方法可以让我们调用方法,因此这样我们就可以对字符串、数值、布尔值这三种基本数据类型的数据进行更多操作。

而什么时候后台会自动创建一个对应的基本包装类型的对象,取决于当前执行的代码是否是为了获取他的值。

每当读取一个基本类型的值,也就是当我们需要从内存中获取到他的值时(这个访问过程称为读取模式),这时后台就会自动创建一个基本包装类型的对象。例如:

var test = 'hhh'
console.log(test) // 读取模式,后台自动创建基本包装类型对象
var test2 = test // 赋值给变量 test2,也需要读取 test 的值,同上

基本包装类型的对象和引用类型的对象最大的一个区别是,对象的生存期不同,导致的一个结果就是,基本包装类型无法自定义自己的方法。

对于引用类型的数据,在执行流离开当前作用域之前都会保存在内存中,而对于自动创建的基本包装类型的对象,只存在于一行代码的执行瞬间,执行完毕就会立即被销毁。 如下:

var str = 'test'
str.test = 'hhh'
console.log(str.test) //undefined

上面第二行代码给自动创建的 String 实例对象添加了 test 属性,虽然此刻代码执行时他是生效的,但是在这行代码执行完毕后该 String 实例就会立刻被销毁,String 实例的 test 属性也就不存在了。

当执行第三行代码时,由于是读取模式,又重新创建了新的 String 实例,而这个新创建的 String 实例没有 test 属性,结果也就是 undefined

用代码的方式解释就是如下:

var str = 'hello';
str.number = 10; //假设我们想给字符串添加一个属性 number ,后台会有如下步骤
(var _str = new String('hello'); // 1 找到对应的包装对象类型,然后通过包装对象创建出一个和基本类型值相同的对象_str.number = 10; // 2 通过这个对象调用包装对象下的方法 但结果并没有被任何东西保存_str =null; // 3 这个对象又被销毁
)
console.log(str.number); // undefined  当执行到这一句的时候,因为基本类型本来没有属性,后台又会重新重复上面的步骤
(var str = new String('hello');// 1 找到基本包装对象,然后又新开辟一个内存,创建一个值为 hello 对象str.number = undefined;// 2 因为包装对象下面没有 number 这个属性,所以又会重新添加,因为没有值,所以值是未定义;然后弹出结果str =null; // 3 这个对象又被销毁
)

那么我们怎么才能给基本类型添加方法或者属性呢?

答案是在基本包装对象的原型下面添加,每个对象都有原型。

//给字符串添加方法  要写到对应的包装对象的原型下才行
var str = 'hello';
String.prototype.last= fuction(){ return this.charAt(this.length);
}; 
str.last(); // 5 执行到这一句,后台依然会偷偷的干这些事
(var _str = new String('hello');// 找到基本包装对象,new一个和字符串值相同的对象,_str.last();  // 通过这个对象找到了包装对象下的方法并调用 _str =null; //  这个对象被销毁
)

🌟真题解答

  • 是否了解 JavaScript 中的包装类型?

参考答案:

包装对象,就是当基本类型以对象的方式去使用时,JavaScript 会转换成对应的包装类型,相当于 new 一个对象,内容和基本类型的内容一样,然后当操作完成再去访问的时候,这个临时对象会被销毁,然后再访问时候就是 undefined

number、string、boolean 都有对应的包装类型。

因为有了基本包装类型,所以 JavaScript 中的基本类型值可以被当作对象来访问。

基本类型特征:

  1. 每个包装类型都映射到同名的基本类型
  2. 在读取模式下访问基本类型值时,就会创建对应的基本包装类型的一个对象,从而方便了数据操作
  3. 操作基本类型值的语句一经执行完毕,就会立即销毁新创建的包装对象

🌟总结

本篇文章是关于JavaScript的一道面试题,后续还会持续更新HTML、CSS、JavaScript、Node.js、Vue.js、网络等前端相关面试题。如果文中出现有瑕疵的地方各位通过评论或者私信联系我,我们一起进步,有兴趣的伙伴可以关注订阅: 前端面试题大全

 

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

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

相关文章

微信预约小程序制作

对于许多新手来说,制作微信预约小程序可能是一项挑战,但并非不可能。本文将通过详细的步骤,指导您从零开始制作一个微信预约小程序。首先,您需要找一个合适的第三方制作平台或工具,乔拓云网就是其中之一。 找一个合适的…

【数据结构】八大排序 (三)

目录 前言: 快速排序 快速排序非递归实现 快速排序特性总结 归并排序 归并排序的代码实现 归并排序的特性总结 计数排序 计数排序的代码实现 计数排序的特性总结 前言: 前文快速排序采用了递归实现,而递归会开辟函数栈帧&#xff0…

信号类型(通信)——最小频移键控(MSK)

系列文章目录 《信号类型(通信)——仿真》 《信号类型(通信)——QAM调制信号》 《信号类型(通信)——QPSK、OQPSK、IJF_OQPSK调制信号》 目录 前言 一、MSK信号特点 1.1、最小频移 1.2、相位连续 二…

Ubuntu16.04.4系统本地提权实验

目录 1.介绍: 2.实验: 3.总结: 1.介绍: 1.1:eBPF简介:eBPF(extendedBerkeleyPacketFilter)是内核源自于BPF的一套包过滤机制,BPF可以理解成用户与内核之间的一条通道,有非常强大的…

Python的控制流语句使用

Python的控制流语句使用 判断语句 if分支示意图语法介绍注意事项示例 for循环示意图语法介绍列表推导式示例 while循环与for的区别语法介绍示例 判断语句 if分支 示意图 单、双、多分支: 语法介绍 # 单分支 if condition:expression # 双分支 if condition:exp…

Spark-java版

SparkContext初始化 相关知识 SparkConf 是SparkContext的构造参数,储存着Spark相关的配置信息,且必须指定Master(比如Local)和AppName(应用名称),否则会抛出异常;SparkContext 是程序执行的入口&#xf…

设计好的测试用例,6大注意事项

设计好的测试用例对于发现缺陷、验证功能、提高可靠性、降低风险和提高效率都具有重要的作用,是保证产品质量和稳定性的重要环节。如果测试用例有问题,可能会导致遗漏缺陷、功能验证不充分、测试效率低下以及误报漏报等问题,从而影响项目的质…

Ubuntu安装nfs服务步骤

Ubuntu安装nfs服务步骤 一、NFS? NFS:网络文件系统(Network File system File)缩写,可通过网络让不同的机器,不同操作系统之间可以彼此共享文件和目录。 二、安装 1.安装nfs服务器命令:sudo…

BUUCTF-pwn-ciscn_2019_ne_51

简单查看保护: 32为程序没有canary没有PIE,应该是简单的栈溢出。我们照着这个思路去找溢出点在哪,运行下程序看看什么情况: 程序上来是输入一个密码验证。随便输入下错误直接退出。因此我们需要到IDA中看看怎么回事: 主…

F. Magic Will Save the World

首先积攒了能量打了怪再积攒是没有意义的,可以直接积攒好,然后一次性进行攻击 那么怎么进行攻击了?可以尽量的多选怪物使用水魔法攻击剩余的再用火魔法进行攻击, 也就是只要存在合法的体积(即装入背包的怪物的体积之…

qt-C++笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题

qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和异步循环解决相互阻塞的问题 code review! 文章目录 qt-C笔记之主线程中使用异步逻辑来处理ROS事件循环和异步循环解决相互阻塞的问题1.Qt的app.exec()详解2.ros::spin()详解3.ros::AsyncSpinner详解4.主线程中结合使用的示…

笔记63:注意力评分函数

本地笔记地址:D:\work_file\(4)DeepLearning_Learning\03_个人笔记\3.循环神经网络\第10章:动手学深度学习~注意力机制 a a a a a a a a a a a a a a a a a a a

Python语言学习笔记之五(Python代码注解)

本课程对于有其它语言基础的开发人员可以参考和学习,同时也是记录下来,为个人学习使用,文档中有此不当之处,请谅解。 注解与注释是不一样的,注解有更广泛的应用; 通过注解与注释都能提高代码的可读性和规…

带大家做一个,易上手的家常蒜薹炒瘦肉

首先 从冰箱那一块瘦肉 用水化一下冰 然后 那一把蒜薹 将所有蒜薹头和尾部去掉一小节 这个地方是不能吃的 然后 剩下的部分 切成如下图这样 一小条一小条的样子 然后 将蒜薹倒入盆中清水洗一下 瘦肉清洗一下 然后切片 然后 直接起锅烧油 油烧热后马上下肉翻炒 一定要大点翻…

kafka C++实现生产者

文章目录 1 Kafka 生产者的逻辑2 Kafka 的C API2.1 RdKafka::Conf2.2 RdKafka::Message2.3 RdKafka::DeliveryReportCb2.4 RdKafka::Event2.5 RdKafka::EventCb2.6 RdKafka::PartitionerCb2.7 RdKafka::Topic2.8 RdKafka::Producer(核心) 3 Kafka 生产者…

【代码】考虑灵活性供需平衡的电力系统优化调度模型

程序名称:考虑灵活性供需平衡的电力系统优化调度模型 实现平台:matlab-yalmip-cplex/gurobi 代码简介:最可再生能源发电设备和并网技术快速发展,以新能源为主导的新型电力系统逐步形成。高比例新能源的随机波动性导致电力系统的…

redis的数据类型的操作增删改查

redis的数据类型的操作增删改查 redis的高可用: 在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% redis的高可用的含义要更加宽泛,正常服务是指标之一数据容量扩展,数据的安全性…

Oracle 11g安装过程

文章目录 前言1.下载安装包2.安装2.1本地安装文件2.2 安装过程 3.查看是否安装成功3.1 查看oracle是否安装成功3.2 查看oracle服务 前言 本文仅用于记录亲自安装oracle的过程 1.下载安装包 官网地址: Oracle Database 11g Release 2 (11.2.0.1.0) 注意&#xff…

数据治理框架和成熟度模型

数据治理成熟度模型 一个企业的数据治理能力越高,所享受到数据治理带来的价值也会越多,如增加收入、减少成本、降低风险等。于是,很多企业想要准确地评估本公司的数据治理能力,可以利用数据治理成熟度模型方法,包括 D…

Javaweb之Vue组件库Element案例的详细解析

4.4 案例 4.4.1 案例需求 参考 资料/页面原型/tlias智能学习辅助系统/首页.html 文件,浏览器打开,点击页面中的左侧栏的员工管理,如下所示: 需求说明: 制作类似格式的页面 即上面是标题,左侧栏是导航&…