当前位置: 首页 > news >正文

JavaScript中的包装类型详解

JavaScript中的包装类型详解

  • 在 JavaScript 中,我们有基本类型和对象类型两种数据类型。
  • 基本类型包括 StringNumberBooleannullundefined 和 Symbol。然而,当我们需要在这些基本类型上调用方法时,就需要用到 JavaScript 的包装类型。

什么是包装类型?

  • 包装类型是 JavaScript 中的一种特殊对象,它们将基本类型的值“包装”在对象中,使我们能够在基本类型上调用方法。JavaScript 提供了三种包装类型:StringNumber 和 Boolean
  • 例如,当我们在一个字符串上调用方法时,JavaScript 会临时将其转换(或者说“包装”)为一个对象,这样就可以调用方法了。
var str = 'hello';
console.log(str.toUpperCase()); // 输出 "HELLO"
  • 在这个例子中,str 是一个字符串基本类型,但我们可以在它上面调用 toUpperCase 方法。这是因为 JavaScript 在后台临时将 str 包装成了一个 String 对象,然后在这个对象上调用了 toUpperCase 方法。

包装类型的特性

  • 值得注意的是,这种包装只是临时的,调用方法后,基本类型值会恢复到原来的状态。这就是所谓的包装类型。
  • 此外,虽然 null 和 undefined 也是基本类型,但它们没有对应的包装类型,也没有可以调用的方法。

包装类型的注意事项

  • 虽然包装类型在 JavaScript 中非常有用,但在使用时也需要注意一些问题。例如,虽然 Boolean 对象是一个包装类型,但它在布尔上下文中总是被视为 true,无论它包装的值是 true 还是 false。这可能会导致一些意想不到的结果。
var bool = new Boolean(false);
if (bool) {console.log('run?'); // 会进到 if 条件里面吗?
}
  • 在这个例子中,bool 是一个 Boolean 对象,其包装的值为 false。然而,因为 bool 是一个对象,所以在 if 语句中,它被视为 true,所以 console.log 语句总是会执行。所以打印出 run?
  • 总的来说,包装类型是 JavaScript 中一个重要的概念,它让我们能够在基本类型上调用方法,极大地增强了 JavaScript 的灵活性和功能性。然而,在使用时,我们也需要注意它的一些特性和潜在问题。

面试题

  • 有可能会是面试题,先看以下代码:
var a = new Boolean(false);
if (!a) {console.log('run?'); // 会进到 if 条件里面吗?
}
  • 看了上面关于包装类型的介绍,那会执行到 if 里面吗?

    • 不会
  • 为什么呢?
// 个人的解析过程:
1. var a = new Boolean(false); 之后,a 的值为 [Boolean: false]
2. 将 a 转换为包装类型,执行 Object(a) 后值为 [Boolean: false]
3. 因为在 if 语句中的判断条件都会转换为 boolean 再进行判断,那再进行 boolean 值的转换, !!Object(a) 后值为 true
4. 而在 if 语句中的条件是取反 a,则 if 条件不成立,则 if 中的语句不执行
  • 原因:

    1. 在 JavaScript 中,有两种类型的布尔值:基本类型的布尔值(true 或 false)和 Boolean 对象(通过 new Boolean() 创建的,它是一个包装对象,可以包装一个布尔值,但它本身是一个对象)。
    2. 在 JavaScript 中,所有的对象(包括 Boolean 对象)在布尔上下文中都被视为 true,无论它们包装的值是 true 还是 false
    3. 这就是为什么 if 语句中的 !a 不会执行的原因,因为 a 是一个 Boolean 对象,即使它包装的值是 false,在布尔上下文中也被视为 true,所以 !a 的结果是 false

技术前沿拓展

前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。

介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。

这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。

看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~

相关文章:

JavaScript中的包装类型详解

JavaScript中的包装类型详解 在 JavaScript 中,我们有基本类型和对象类型两种数据类型。基本类型包括 String,Number,Boolean,null,undefined 和 Symbol。然而,当我们需要在这些基本类型上调用方法时&…...

如何向各大媒体网站投稿 海外媒体发稿平台有哪些

在数字化时代,各大媒体网站是企业推广和个人展示的重要平台。通过在媒体网站上发布文章,可以有效地扩大影响力和提升知名度。但是,如何投稿到各大媒体网站呢?以下是一些常用的方法和步骤。 1. 研究目标媒体 在投稿之前&#xff0…...

基于SpringBoot的论坛系统(附项目源码+论文)

摘要 如今的时代,是有史以来最好的时代,随着计算机的发展到现在的移动终端的发展,国内目前信息技术已经在世界上遥遥领先,让人们感觉到处于信息大爆炸的社会。信息时代的信息处理肯定不能用之前的手工处理这样的解决方法&#xf…...

堆以及堆的实现

文章目录 堆的概念堆的实现HeapPushHeapPop HeapTop HeapSize HeapEmpty堆的应用 堆的概念 堆是一颗完全二叉树每个结点的值都小于子结点的值,这颗二叉树为小根堆每个结点的值都大于子结点的值,这颗二叉树为大根堆堆的定义如下:n个元素的序列…...

使用RabbitMQ实现延时消息自动取消的简单案例

一、流程图 二、导包 <!--消息队列 AMQP依赖&#xff0c;包含RabbitMQ--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 三、配置文件 #消息队列 …...

Docker部署(ruoyi案例接上篇Docker之部署前后端分离项目)实施必会!!!!

文章目录 Docker部署前端 Docker部署前端 接上篇博主已经部署好后端Docker部署后端&#xff0c;现在来讲解怎么部署前端 MySQL和redis是不依赖其他任何一个东西的&#xff0c; ruoyi-admin是因为你启动项目的时候是必须连接数据库的 现在去单独启动它 docker start ruoyi-a…...

电脑中已经有多个模组压缩文件,如何通过小火星露谷管理器批量安装

如果已经下载了很多的星露谷模组压缩文件&#xff08;zip包&#xff09;&#xff0c;可以通过【添加模组】功能&#xff0c;将模组批量解压到Mods文件夹中。 名词解释 为了避免这篇文章的内容看不懂&#xff0c;先解释两个名词。 直装型模组&#xff1a;直接解压到Mods就能生…...

[Linux]如何理解kernel、shell、bash

文章目录 概念总览kernelshell&bash 概念总览 内核(kernel) &#xff0c;外壳(shell) &#xff0c;bash kernel kernel是指操作系统中的核心部分&#xff0c;用户一般是不能直接使用kernel的。它主要负责管理硬件资源和提供系统服务&#xff0c;如内存管理、进程管理、文件…...

C++:Vector的使用

一、vector的介绍 vector的文档介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以…...

Redis之事务(详细解析)

请直接看原文:不能回滚的Redis事务还能用吗 - 知乎 (zhihu.com) ------------------------------------------------------------------------------------------------------------------------------ 1、Redis事务的概念&#xff1a; Redis 事务的本质是一组命令的集合。…...

Java项目:39 springboot007大学生租房平台的设计与实现

作者主页&#xff1a;源码空间codegym 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统有管理员、房东和用户 【主要功能】 1、后台&#xff1a;房源管理、信息审批管理、订单信息管理、房东管理、用户管理 2、前台&#xff1…...

安卓内存信息查看

目录 前言一、Android查看内存相关信息的方法1.1 通过 adb shell 获取内存信息1.2 通过编程方式获取内存信息1.3 adb shell 获取应用程序内存使用情况1.4 free指令 二、总结 前言 一、Android查看内存相关信息的方法 1.1 通过 adb shell 获取内存信息 C:\Users\henry.xue>…...

Positional Encoding 位置编码

Positional Encoding 位置编码 flyfish Transformer模型没有使用循环神经网络&#xff0c;无法从序列中学习到位置信息&#xff0c;并且它是并行结构&#xff0c;不是按位置来处理序列的&#xff0c;所以为输入序列加入了位置编码&#xff0c;将每个词的位置加入到了词向量中…...

MySql、Navicat 软件安装 + Navicat简单操作(建数据库,表)

一、MySql、Navicat 软件安装 及正常使用 MySql下载&#xff0b;安装&#xff1a; 检查安装情况&#xff1a; 配置环境变量&#xff1a; 搞定了&#xff01;&#xff01;&#xff01; 可以登陆试哈哈哈 连接navicat 开始创建数据库 二、 商品种类表 - commoditytype int …...

逆向案例五、爬取b站评论,表单MD5加密

1.便捷写爬虫网站&#xff1a; Convert curl commands to code 使用流程&#xff1a;又点击想要抓的包&#xff0c;复制URL&#xff08;base&#xff09;格式复制 在上面链接中粘贴即可 2.找到含有评论的包&#xff08;即main?oid)&#xff1a;观察表单发现两处参数在变化&…...

010-原型链

原型链 1、概念2、原理3、new 操作符原理4、应用 1、概念 原型链&#xff1a;javascript的继承机制&#xff0c;是指获取JavaScript对象的属性会顺着其_proto_的指向寻找&#xff0c;直至找到Object.prototype上。 2、原理 &#x1f4a1; Tips&#xff1a;构造函数 Fn&#…...

Electron-builder打包安装包——编译篇

突然有一天想打包个桌面程序&#xff0c;没有打包过&#xff0c;经过九牛二虎之力终于打包出来&#xff0c;在此感谢那些热于分享的前辈&#xff01; 本篇只讲打包运行和出现的问题 一、准备工作&#xff1a;提前下载相关资源包&#xff0c;否则在国内环境下可能因为网络问题…...

Red Hat系统升级内核版本

查看当前内核版本 uneme -r yum list kernel升级内核 yum update -y kernel检查升级后的内核版本 uneme -r yum list kernel升级系统中已安装的软件包到最新版本&#xff08;过程时间较长&#xff09; 目前只升级了系统内核&#xff0c;系统相关的安装包还是老的&#xff0…...

Java集合set之HashSet、LinkedHashSet、TreeSet的区别?

Java的集合中主要由List&#xff0c;Set&#xff0c;Queue&#xff0c;Map构成&#xff0c;Set特点&#xff1a;存取无序&#xff0c;不可以存放重复的元素&#xff0c;不可以用下标对元素进行操作。 HashSet 作为Set容器的代表子类&#xff0c;HashSet经常被用到&#xff0c…...

全方位碾压chatGPT4的全球最强模型Claude 3发布!速通指南在此!保姆级教学拿脚都能学会!

&#x1f389;&#x1f389;欢迎光临&#xff0c;终于等到你啦&#x1f389;&#x1f389; &#x1f3c5;我是苏泽&#xff0c;一位对技术充满热情的探索者和分享者。&#x1f680;&#x1f680; &#x1f31f;持续更新的专栏《Spring 狂野之旅&#xff1a;从入门到入魔》 &a…...

upload-Labs靶场“11-15”关通关教程

君衍. 一、第十一关 %00截断GET上传1、源码分析2、%00截断GET上传 二、第十二关 %00截断POST上传1、源码分析2、%00截断POST上传 三、第十三关 文件头检测绕过1、源码分析2、文件头检测绕过 四、第十四关 图片检测绕过上传1、源码分析2、图片马绕过上传 五、第十五关 图片检测绕…...

linux-rpm命令

rpm命令管理程序包&#xff1a;安装、升级、卸载、查询和校验 1、忽略依赖关系安装/卸载包 安装&#xff1a;rpm -Uvh 软件包名 --nodeps 卸载&#xff1a;rpm -e 软件包名 --nodes&#xff01;&#xff01;&#xff01;&#xff01;慎用&#xff01;&#xff01;&#xff01…...

如何利用python实现自己的modbus-tcp库

如果你想使用纯Socket编程来实现Modbus TCP通讯,而不是依赖于Modbus库,你需要理解Modbus TCP协议的细节,并能够手动构建和解析Modbus消息。以下是一个简单的示例,展示了如何使用Python的socket库来实现Modbus TCP通讯: 了解Modbus TCP协议: Modbus TCP协议使用TCP作为底层…...

linux系统-----------搭建LNMP 架构

PHP(Hypertext Preprocessor 超文本预处理器)是通用服务器端脚本编程语言&#xff0c;主要用于web开发实现动态web页面&#xff0c;也是最早实现将脚本嵌入HTML源码文档中的服务器端脚本语言之一。同时&#xff0c;php还提供了一个命令行接口&#xff0c;因此&#xff0c;其也可…...

C++中boost库的安装及使用(Windows)

Boost库的安装及使用 引言使用现有的boost库安装及使用引言 C++开发中经常会用到boost库,本文记录一下Windows上boost在visual studio2019上的使用。 Boost库是一个跨平台的C++库集合,旨在为C++开发者提供一系列高质量的通用功能。不同的Visual Studio(VS)版本并不要求安…...

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽(时隔一年,再谈C++抽象内存模型)

CPP编程-CPP11中的内存管理策略模型与名称空间管理探幽 CPP的四大内存分区模型 在 C 中&#xff0c;**内存分区是一种模型&#xff0c;用于描述程序运行时内存的逻辑组织方式&#xff0c;但在底层操作系统中&#xff0c;并不存在严格意义上的内存分区。**操作系统通常将内存分…...

springboot项目整合minio实现文件的分布式存储

minio是一款分布式存储系统&#xff0c;上一篇详细介绍了minio在windows环境下的搭建集群并通过nginx实现负载均衡&#xff0c;这里简单介绍下springboot项目整合minio并实现文件的上传下载删除等操作。 一、依赖的引入 1.1、maven项目 <dependency><groupId>io…...

微信小程序开发学习笔记《19》uni-app框架-配置小程序分包与轮播图跳转

微信小程序开发学习笔记《19》uni-app框架-配置小程序分包与轮播图跳转 博主正在学习微信小程序开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。建议仔细阅读uni-app对应官方文档 一、配置小程序分包 分包可以减少小程序首次启动时的加载时间 为此&#…...

Python内置模块

目录 什么是模块 模块分类 通过模块创建者分类 系统内置模块 第三方模块 在线安装 离线安装 模块导入 math和random模块介绍 math模块 random模块 什么是模块 在我们编写程序时&#xff0c;需要导入包。例如随机数的产生&#xff0c;需要import random。import XXX&…...

WordPress建站入门教程:小皮面板phpstudy如何安装PHP和切换php版本?

小皮面板phpstudy支持的PHP版本有很多&#xff0c;包括5.2.17、5.3.29、5.4.45、5.5.9、5.6.9、7.0.9、7.1.9、7.2.9、7.3.4、7.3.9、7.4.3、8.0.2、8.2.9。那么我们如何安装其他的php版本和切换网站的php版本呢&#xff1f;只需要简单几步即可&#xff0c;具体如下&#xff1a…...