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

JavaScript 原始数据类型和对应的对象类型(内置对象)之间的关系

JavaScript 原始数据类型和对应的对象类型(内置对象)之间的关系

JavaScript 的原始(primitive)数据类型包括包括数字(Number)、字符串(String)、布尔值(Boolean)、null、undefined、符号(Symbol,ES6 引入)和 BigInt(ES2020 引入)。这些原始数据类型是不可变的,没有属性或方法。

在 JavaScript 中,原始数据类型和内置对象(也称为对象类型或包装器对象)之间存在一种特殊的关系。

原始数据类型和对应的对象类型之间的关系:

  • 原始类型是简单的数据类型,没有属性或方法。
  • 对应的对象类型是通过构造函数创建的复杂对象,具有属性和方法。
  • JavaScript 会在需要时自动将原始类型的值包装成对应的对象类型,以便可以调用方法。
  • 这个自动包装过程通常是透明的,开发者不需要手动进行装箱或拆箱操作。
  • 通常情况下,我们在编程时使用原始数据类型,因为它们更简单、更快。只有在需要利用对象的属性和方法时,JavaScript 引擎才会临时将它们转换为对象。

理解原始数据类型和对象类型之间的关系需要注意的几个方面:

  • 自动装箱(Autoboxing:当你对一个原始数据类型的值使用属性或方法时,JavaScript 会自动将其转换(装箱)为对应的对象类型,这样就可以使用对象提供的方法和属性。例如,当你对一个字符串原始值调用 .length 属性时,JavaScript 会临时将其转换为 String 对象,然后访问其 length 属性。
  • 原始值的不可变性:原始数据类型的值是不可变的,这意味着一旦创建,它们的值就不能改变。相反,对象是可变的,你可以改变其属性和方法。
  • 性能考虑:使用原始数据类型通常比使用对象类型更高效,因为原始类型占用的内存更少,且没有对象的额外开销。
  • 类型转换:你可以通过调用对象类型的方法来显式地将原始类型转换为对象类型,反之亦然。例如,String(123) 会将数字转换为字符串,而 Number("123") 会将字符串转换为数字。

JavaScript 提供了一些内置的构造函数,如 Number 和 String,这些构造函数可以用来创建对应原始类型的包装对象。这些包装对象是可以包含属性和方法的复杂数据类型。当你对一个原始类型的值调用方法时,JavaScript 会临时将其包装成一个对象,以便你可以调用这些方法。

原始类型的数字是不可变的值。当你对一个原始类型的数字进行操作时,实际上是在创建一个新的数字值。例如:

let num = 10;

num.toFixed(2); // "10.00"

在上面的例子中,toFixed 是一个方法,看起来像是直接被数字字面量 10 调用的。但实际上,JavaScript 在幕后将 10 临时转换成了一个 Number 对象,然后在这个对象上调用了 toFixed 方法。这个过程称为 “装箱”(boxing)。

Number 对象是通过 Number 构造函数创建的,它包含了数字的属性和方法。例如:

let numObject = new Number(10);

numObject.toFixed(2); // "10.00"

在这个例子中,numObject 是一个 Number 对象,它是一个包含原始数字值的复杂对象。

原始类型的字符串也是不可变的值。字符串有很多方法,比如 toUpperCase 和 charAt,这些方法可以被字符串字面量直接调用:

let str = "hello";

str.toUpperCase(); // "HELLO"

当调用 str.toUpperCase() 时,原始字符串 "hello" 被临时包装成一个 String 对象,然后在这个对象上调用 toUpperCase 方法。完成方法调用后,这个临时对象就被丢弃了。

String 对象是通过 String 构造函数创建的,它同样包含了字符串的属性和方法:

let strObject = new String("hello");

strObject.toUpperCase(); // "HELLO"

在这个例子中,strObject 是一个 String 对象。

需要注意的是,在实际编程中,我们通常直接使用原始数据类型,而不是显式创建对象类型,因为 JavaScript 引擎会根据需要自动进行装箱和拆箱操作。

换句话说,在实际编程中,我们通常直接使用原始数据类型,因为它们更简单、更高效。JavaScript 引擎会在需要时自动进行原始数据类型到对象类型的临时转换(装箱),以便我们可以利用对象上的方法和属性,这个过程对开发者来说是透明的,通常不需要手动创建这些对象。

并不是每个原始数据类型都有一个直接对应的对象类型,具体情况如下:

Number: 有一个对应的对象类型,即 Number 对象。

String: 有一个对应的对象类型,即 String 对象。

Boolean: 有一个对应的对象类型,即 Boolean 对象。

Symbol: 有一个对应的对象类型,即 Symbol 对象。

BigInt: 有一个对应的对象类型,即 BigInt 对象。

然而,对于 null 和 undefined,情况就不同了:

null: 没有对应的对象类型。null 表示“没有值”或“空值”,它通常用于指示变量未指向任何对象。

undefined: 同样没有对应的对象类型。undefined 表示变量已声明但未被初始化。

内置构造函数和它们创建的对象包装器:

Number: 这个构造函数用于创建数字的对象包装器。例如,new Number(123) 会创建一个包装了数字 123 的 Number 对象。

String: 这个构造函数用于创建字符串的对象包装器。例如,new String("text") 会创建一个包装了字符串 “text” 的 String 对象。

Boolean: 这个构造函数用于创建布尔值的对象包装器。例如,new Boolean(true) 会创建一个包装了布尔值 true 的 Boolean 对象。

Symbol: 用于创建符号的构造函数,它是 ES6 中引入的。例如,Symbol('description') 会创建一个具有描述的新符号。

BigInt: 用于创建大整数的构造函数,它是在 ES2020 中引入的。例如,BigInt(12345678901234567890) 会创建一个 BigInt 对象。

相关文章:

JavaScript 原始数据类型和对应的对象类型(内置对象)之间的关系

JavaScript 原始数据类型和对应的对象类型(内置对象)之间的关系 JavaScript 的原始(primitive)数据类型包括包括数字(Number)、字符串(String)、布尔值(Boolean&#xf…...

报错For debugging consider passing CUDA_LAUNCH_BLOCKING=1.

.报错For debugging consider passing CUDA_LAUNCH_BLOCKING1. /aten/src/ATen/native/cuda/NLLLoss2d.cu:103: nll_loss2d_forward_kernel: block: [29,0,0], thread: [707,0,0] Assertion t > 0 && t < n_classes failed. 报错信息如下&#xff1a; ./aten/…...

whisper使用方法

看这个 github https://github.com/Purfview/whisper-standalone-win/tags下载 视频提取音频 ffmpeg -i 222.mp4 -vn -b:a 128k -c:a mp3 output.mp3截取4秒后的音频 ffmpeg -i output.mp3 -ss 4 -c copy output2.mp3使用 whisper-faster.exe 生成字幕 whisper-faster.exe …...

通过easyexcel实现数据导入功能

上一篇文章通过easyexcel导出数据到excel表格已经实现了简单的数据导出功能&#xff0c;这篇文章也介绍一下怎么通过easyexcel从excel表格中导入数据。 目录 一、前端代码 index.html index.js 二、后端代码 controller service SongServiceImpl 三、功能预览 四、后端…...

Springboot_文件下载功能(前端后端)

遇到的问题&#xff1a; 文件下载后文件一直被破坏&#xff0c;无法正常打开文件名乱码&#xff0c;如图 刚开始一直在纠结&#xff0c;是不是后端没有写对&#xff0c;然后导致下载不能使用 后来搜索了一些资料&#xff0c;发现后端没什么问题 然后就开始找到其他项目对比…...

Vue框架学习笔记——v-bind数据单向绑定和v-model数据双向绑定

文章目录 v-bind&#xff0c;数据单向绑定简写形态&#xff08;省略v-bind&#xff0c;只留冒号&#xff09;示例一&#xff08;将输入框数据改为&#xff1a;哈哈哈哈哈&#xff09;&#xff1a;实例二&#xff08;将Vue实例中的name改为字符串&#xff1a;"单向绑定&quo…...

将对象转成URL参数

背景 有的时候前端跳转到其他平台的页面需要携带额外的参数&#xff0c;需要将对象转成用 & 连接的字符串拼接在路径后面。 实现方法...

【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

超级武器!深入LoadRunner性能测试流程及极速分析结果!

性能测试目的 1 什么是性能测试? 性能测试是通过性能的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 负载测试和压力测试都属于性能测试&#xff0c;两者可以结合进行。通过负载测试&#xff0c;确定在各种工作负载下系统的性能&#xff0…...

解决requests库进行爬虫ip请求时遇到的错误的方法

目录 一、超时错误 二、连接错误 三、拒绝服务错误 四、内容编码错误 五、HTTP错误 在利用requests库进行网络爬虫的IP请求时&#xff0c;我们可能会遇到各种错误&#xff0c;如超时、连接错误、拒绝服务等等。这些错误通常是由目标网站的限制、网络问题或我们的爬虫代码中…...

大语言模型领域的重要术语解释

前言 本人对人工智能非常感兴趣&#xff0c;目前是一名初学者&#xff0c;在研究大语言模型的一些内容。很多模型都是用英文提出的&#xff0c;其中也包括很多概念&#xff0c;有些概念的中文翻译和其想表达的意思不完全一样&#xff0c;所以在这里&#xff0c;想更加精准地帮…...

无需公网IP,使用内网穿透实现公网访问本地OpenWRT管理界面

文章目录 1.openWRT安装cpolar2.配置远程访问地址3.固定公网地址 简单几步实现在公网环境下远程访问openWRT web 管理界面&#xff0c;使用cpolar内网穿透创建安全隧道映射openWRT web 界面面板443端口&#xff0c;无需公网IP&#xff0c;无需设置路由器。 1.openWRT安装cpola…...

利用 docker 实现JMeter分布式压测

为什么需要分布式&#xff1f; 在工作中经常需要对一些关键接口做高QPS的压测&#xff0c;JMeter是由Java 语言开发&#xff0c;没创建一个线程&#xff08;虚拟用户&#xff09;&#xff0c;JVM默认会为每个线程分配1M的堆栈内存空间。受限于单台试压机的配置很难实现太高的并…...

Sentinel 分布式系统

Sentinel 是一种分布式系统的流量防卫兵和熔断器&#xff0c;由阿里巴巴开发并开源。它的主要目标是保护分布式系统中的稳定性和可用性&#xff0c;防止因高并发或异常流量而导致的系统崩溃。下面是 Sentinel 的原理和使用教程的概要&#xff1a; Sentinel 的原理&#xff1a;…...

Cookie、Session、CBV加装饰器的三种方法

【0】cookie、session和Token的发展史 【1】Cookie的形式 存储形式&#xff1a;k&#xff1a;v键值对存储位置&#xff1a;客户端缺点&#xff1a;不安全&#xff0c;信息可能会泄露 【2】session的形式 标识符&#xff0c;表示我是当前用户加密出来的数据对敏感信息进行加密…...

【高级渗透篇】网络安全面试

【高级渗透篇】网络安全面试 1.权限维持2.代码安全Python语法相关 1.权限维持 Linux权限维持方法论 Windows权限维持方法论 2.代码安全 Python 语法相关 1、Python的值类型和引用类型是哪些 Python 中的值类型包括&#xff1a; 数字类型&#xff08;如整数、浮点数、复数…...

【Flink】Process Function

目录 1、ProcessFunction解析 1.1 抽象方法.processElement() 1.2 非抽象方法.onTimer() 2、Flink中8个不同的处理函数 2.1 ProcessFunction 2.2 KeyedProcessFunction 2.3 ProcessWindowFunction 2.4 ProcessAllWindowFunction 2.5 CoProcessFunction 2.6 ProcessJo…...

【源码分析】zeebe actor模型源码解读

zeebe actor 模型&#x1f64b;‍♂️ 如果有阅读过zeebe 源码的朋友一定能够经常看到actor.run() 之类的语法&#xff0c;那么这篇文章就围绕actor.run 方法&#xff0c;说说zeebe actor 的模型。 环境⛅ zeebe release-8.1.14 actor.run() 是怎么开始的&#x1f308; Lon…...

python3实现类似expect shell的交互式与SFTP的脚本

前面写过一篇关于python实现类似expect shell的交互式能力的文章&#xff0c;现在补全一下加上sftp的能力脚本。 例子在代码中__example()方法。 依赖paramiko库&#xff0c;所以需要执行pip install paramiko来安装。 import os import queue import re import threading im…...

java游戏制作-飞翔的鸟游戏

一.准备工作 首先创建一个新的Java项目命名为“飞翔的鸟”&#xff0c;并在src中创建一个包命名为“com.qiku.bird"&#xff0c;在这个包内分别创建4个类命名为“Bird”、“BirdGame”、“Column”、“Ground”&#xff0c;并向需要的图片素材导入到包内。 二.代码呈现 pa…...

别再为喇叭没声音发愁了!手把手教你用ES8311芯片搞定TTS云喇叭播放(附完整寄存器配置表)

ES8311音频芯片实战&#xff1a;从无声到完美播放的避坑指南 引言 当你终于完成了ES8311芯片的驱动移植&#xff0c;满怀期待地接上喇叭准备测试时——寂静。那种令人窒息的无声瞬间&#xff0c;相信每个嵌入式音频开发者都经历过。这不是简单的硬件故障&#xff0c;而是一场关…...

13本大模型入门必看书籍:从零基础小白到精通的完整学习路线

本文推荐了13本大模型入门必看书籍&#xff0c;涵盖了从大模型基础、多模态大模型到扩散模型、大模型压缩、开源大模型、LangChain等方面的内容。这些书籍适合对大语言模型感兴趣的读者&#xff0c;从理论到实践&#xff0c;帮助读者从零基础小白逐步成长为精通大模型的技术人才…...

别再问Markdown怎么合并单元格了,用这3个HTML属性5分钟搞定

突破Markdown表格限制&#xff1a;HTML合并单元格实战指南 在技术文档写作、知识管理工具&#xff08;如Obsidian、Typora、Notion&#xff09;或静态博客&#xff08;如Hugo、Jekyll&#xff09;中&#xff0c;Markdown因其简洁高效的特性成为首选格式。然而&#xff0c;当我…...

告别DCC工具:在UE5中纯代码创建可交互的StaticMesh(从MeshDescription到点击事件全流程)

纯代码构建UE5交互式StaticMesh&#xff1a;从MeshDescription到事件响应的工程实践 在游戏开发中&#xff0c;动态生成3D模型并赋予交互能力是程序化内容生成的核心需求。传统工作流依赖DCC工具&#xff08;如Blender或Maya&#xff09;导出静态模型&#xff0c;但这种方式在需…...

如何将3D VR视频转换为2D格式:基于MPV插件的完整解决方案指南

如何将3D VR视频转换为2D格式&#xff1a;基于MPV插件的完整解决方案指南 【免费下载链接】VR-reversal VR-Reversal - Player for conversion of 3D video to 2D with optional saving of head tracking data and rendering out of 2D copies. 项目地址: https://gitcode.co…...

19.【AI权限与成本控制系统实战】一次API被刷爆让我损失上千元:如何设计企业级权限+配额系统?(完整落地方案)

【AI权限与成本控制系统实战】一次API被刷爆让我损失上千元&#xff1a;如何设计企业级权限配额系统&#xff1f;&#xff08;完整落地方案&#xff09;一、问题场景&#xff08;真实事故复盘&#xff09; 这是我做AI系统以来&#xff0c;最“肉疼”的一次事故。 某天凌晨&…...

期刊推荐:Journal of Artificial Intelligence and Soft Computing Research(ISSN: 2083-2567)

学科领域&#xff1a; 计算机-人工智能 期刊类型&#xff1a; SCI/SSCI/AHCI 收录数据库&#xff1a; SCI(SCIE) ISSN&#xff1a; 2083-2567 中科院&#xff1a; 2区 影响因子&#xff1a; 2.4 JCR&#xff1a; Q3 咨询获取专业投稿服务 Journal of Artificial Intelli…...

Universal Android Debloater:无需Root的安卓设备瘦身神器

Universal Android Debloater&#xff1a;无需Root的安卓设备瘦身神器 【免费下载链接】universal-android-debloater Cross-platform GUI written in Rust using ADB to debloat non-rooted android devices. Improve your privacy, the security and battery life of your de…...

八大网盘直链下载终极指南:LinkSwift开源工具免费解锁高效下载体验

八大网盘直链下载终极指南&#xff1a;LinkSwift开源工具免费解锁高效下载体验 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动…...

机器学习大师课 第 1 课:什么是机器学习?写出你的第一个 AI 程序

课程承诺&#xff1a;每节课只讲 1 个核心概念、1 个核心思想、1 段可运行代码。学完立刻能用&#xff0c;绝不讲听不懂的废话。本节课目标&#xff1a;彻底搞懂机器学习和普通编程的本质区别&#xff0c;亲手写出人生第一个机器学习程序&#xff0c;5 分钟内看到 AI 预测结果。…...