JS - 包装类型

目录

  • 1,什么是包装类型
  • 2,作用
  • 3,和其他引用类型的区别
  • 4,如何为基本类型添加属性或方法

1,什么是包装类型

在 js 中,数据类型分为基本数据类型和引用数据类型。

而这2个类型有个明显的区别:引用类型有自己内置的方法(在原型上),也可以自定义其他方法来操作数据。

可是日常开发中,好像基本类型也可以使用方法吧,看个例子:

const str = 'hello'
const str2 = str.indexOf('e')
console.log(str2) // 1

str 是基本数据类型,但却能调用方法。是因为在执行第2行代码时,会隐式的做如下操作

  1. 自动创建 String 类型的一个实例。
  2. 调用实例(对象)上指定的方法。
  3. 销毁这个实例。

这个String 类型,就是包装类型,是一种特殊的引用类型。在 JS 中有3个:StringNumberBoolean

代码解释上面的例子:

const str = 'hello'
const str2 = str.indexOf('e')
//
(const _str = new String('hello'); // 找到对应的包装类型,然后创建出一个和基本类型值相同的实例const str2 = _str.charAt(0); // 实例可以调用包装类型原型上的方法,并返回结给 str2_str = null;  // 之后这个临时创建的实例就被销毁了,str = null
)
//
console.log(str2) // 1

2,作用

通过上面的例子也可以看出:为了更方便对字符串、数值、布尔值这三种基本数据类型的数据进行更多操作。

3,和其他引用类型的区别

包装类型和其他引用类型,创建出的实例的生存期不同,导致基本包装类型无法动态自定义属性和方法。

举例:

const str = 'hello'
str.test = '求关注'
console.log(str.test) // undefined

首先,什么时候会自动创建对象的包装类型的实例,取决于当前指定的代码是否为了获取值。并且该实例只存在于代码的执行瞬间,执行完毕就会销毁

所以,上面第2,3行代码都在获取值,都会自动创建一次。

代码解释上面的例子:

const str = 'hello';
str.test = '求关注';
// 
(const _str = new String('hello');_str.test = '求关注'; // 为这个实例添加 test 属性_str = null; // 实例被销毁
)
//
console.log(str.test); // undefined 后台重复上面的步骤
(const _str = new String('hello');console.log(_str.test); // 因为实例没有 test 属性,所以打印出 undefined;_str = null;
)
//

4,如何为基本类型添加属性或方法

答案是:加在包装类型对象的原型上。

const str = 'hello';
String.prototype.myName= '下雪天的夏风'
console.log(str.myName)
//
(const _str = new String('hello');console.log(_str.myName) // 打印 '下雪天的夏风'_str = null;
)
//

以上。

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

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

相关文章

SpringMVC修炼之旅(2)基础入门

一、第一个程序 1.1环境配置 略 1.2代码实现 package com.itheima.controller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;//定义…

【JaveSE】:认识异常

异常 一.异常的概念二.异常的体系结构1.基础结构2.异常分类 三.异常的处理1.防御式编程2.异常的抛出3.异常捕获4.try-catch捕获并处理5.finally 四.异常处理流程五.自定义异常 一.异常的概念 在Java中,将程序执行过程中发生的不正常行为称为异常。 算术异常 数组越界…

推荐一款手持式ECU刷写设备,国产软件配合使用

同星智能开发的一款手持式ECU刷写工具——TF1011,在TSMaster中导入诊断流程即可离线一键刷写。在 PC 端完成配置后,在设备可以在手持式离线场景下实现:基于 UDS 协议的诊断和基于 UDS 协议的 Flash Bootloader 程序更新功能。 产品简介—TF10…

Spring 面试题——事务

目录 1.谈谈对 Spring 事务的理解。2.Spring 管理事务的方式有哪几种?3.✨Spring 事务底层源码是如何实现的?3.1.后置处理3.2.事务执行3.3.总结 4.Transactional 注解有什么作用?它的常用属性有哪些?5.✨Spring 事务中的传播行为是…

ansible常用模块介绍

ansible运行模块的两种方式 Ad - Hoc 利用 ansible 命令直接完成管理 , 主要用于临时命令使用场景 ansible westos -m shell -a ls /mnt playbook ansible 脚本 , 主要用于大型项目场景 , 需要前期的规划 vim test.yml - hosts: all task…

【栈】车队

题目: /** 单调栈:存储到终点的时间,需要考虑浮点数* 思路:首先按照距离进行排序(目的:如果离终点远的车辆用时比前面的车辆用时短,则是一个车队)* 排序后计算每一辆车辆的时间如果用…

web:[SUCTF 2019]CheckIn(一句话木马,.user.ini)

题目 页面显示 上传文件&#xff0c;随便上传一个文件试试 上传了一个文本&#xff0c;显示失败&#xff0c;不是图片 那就换图片马上传试试 不能包含<?,换一种写法&#xff0c;需要加上GIF89a&#xff0c;进行exif_imagetype绕过 上传成功 这里用.user.ini或者用post传参…

甘草书店:#8 2023年11月22日 星期三「“说一套做一套”的甘草与麦田」

最近与甘草书店的投资方和意向投资方沟通&#xff0c;听取了来自不同领域不同人群的观点。他们讲的都有道理&#xff0c;但他们说的都不是甘草。就像“麦田”成立之前&#xff0c;世间没有“麦田”一样&#xff1b;“甘草”出现之前&#xff0c;世间没有也没有“甘草”。 故事…

力扣116. 填充每个节点的下一个右侧节点指针(详细讲解root根节点的理解)

题目&#xff1a; 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每个 next 指针&#xff0c;让这个指针指向其下一个右…

220V工频正弦波逆变器设计

摘 要 与传统逆变器相比&#xff0c;工频正弦波逆变器具有电容电压应力低的优点。但是工频正弦波逆变器存在开关器件电压应力大和开关频率高的缺陷。将SPWM调制策略应用于工频正弦波逆变器&#xff0c;并在不产生电流纹波的条件下实现了最大调制度&#xff0c;不仅能够减小开关…

05.开闭原则(Open Closed Principle)

“你这个人怎么这么轴&#xff1f;让你改改以前的代码怎么和要了你命似的&#xff1f;难道你的能力仅限于此吗&#xff1f;” “你懂什么&#xff1f;我有我的原则&#xff01;我有我的信仰&#xff01;” 一言 开闭原则即&#xff1a;对扩展开放&#xff0c;对修改关闭&#…

D. In Love

贪心&#xff0c;维护最靠左的右端点以及最靠右的左端点 // Problem: D. In Love // Contest: Codeforces - Codeforces Round 905 (Div. 3) // URL: https://codeforces.com/contest/1883/problem/D // Memory Limit: 256 MB // Time Limit: 2000 ms // // Powered by CP Edi…

【从0配置JAVA项目相关环境1】jdk + VSCode运行java + mysql + Navicat + 数据库本地化 + 启动java项目

从0配置JAVA项目相关环境 写在最前面一、安装Java的jdk环境1. 下载jdk2. 配置jdk3. 配置环境变量 二、在vscode中配置java运行环境1. 下载VSCode2. 下载并运行「Java Extension Pack」 三、安装mysql1.官网下载MySQL2.开始安装如果没有跳过安装成功 3.配置MySQL Server4.环境变…

【爬虫】自动下载指定网站全部图片(Java版)

爬虫是一种自动化程序&#xff0c;能够模拟人类的浏览行为&#xff0c;访问网络资源并提取所需数据。它可以通过发送HTTP请求获取网页内容&#xff0c;并对网页进行解析和数据提取。 在大多数时候&#xff0c;提到爬虫我们就会想到 Python&#xff0c;其实 Java 也是可以实现爬…

判断完数(写出部分函数)

例如&#xff1a;本题要求实现一个函数&#xff0c;判断一个自然数是否是完数。如果一个自然数除自身之外的因子和等于它自己&#xff0c;则称该数为完数。例如 6 1 2 3&#xff1b;则6是完数。 函数接口定义&#xff1a; 在这里描述函数接口。&#xff1a;int isPerfect (…

ApplicationContextAware 类

优质博文&#xff1a;IT-BLOG-CN 需求&#xff1a; 使用autowired注入一些对象&#xff0c;但发现不可以直接使用Autowired&#xff0c;因为方法是static的&#xff0c;要使用该方法当前对象也必须是static&#xff0c;正常情况下Autowired无法注入静态的bean&#xff0c;于是…

数据结构与算法编程题44

有向无权图邻接矩阵表示 //参考博客&#xff1a;https://blog.csdn.net/qq_54162207/article/details/117414707#include <iostream> using namespace std;#define Maxsize 100 #define VertexmMaxNum 20 #define ERROR 0 #define OK 1 typedef string VertexType; …

img标签禁止右键点击复制图片等功能

场景描述&#xff1a;在网页中显示图片&#xff0c;但是不想让其他人右键保存图片 会用到一个新的属性&#xff1a;oncontextmenu 代码如下 <img src"./123.png" alt"" oncontextmenu"return false">这样虽然能解决不在当前页右键保存图片…

微信玩具小程序商城开发技巧

小程序已成为许多企业和个人开展业务的重要工具之一。如果你想在玩具行业中打造一个小程序商城&#xff0c;但又没有相关的编程经验&#xff0c;不用担心&#xff01;本文将通过乔拓云平台提供的简单操作步骤&#xff0c;分享给你玩具行业小程序平台搭建的教程。 首先&#xff…

DriveWorks——参数化设计非标定制利器

DriveWorks基本介绍 DriveWorks是一套被 SOLIDWORKS 认可为金牌合作伙伴产品的设计自动化软件。DriveWorks 可自动创建特定于订单的销售文档和 SOLIDWORKS 制造数据。减少重复性任务&#xff0c;消除错误&#xff0c;增加销售额&#xff0c;并在创纪录的时间内交付定制产品。 为…