问题思考

阅读以下代码:

const str1 = 'str1';
const str2 = new String('str2');typeof str1; // string
typeof str2; // object

在没理解JavaScript基本类型和基本类型包装对象之前你是否也会觉得以上代码的结果很奇怪呢?

基本类型

基本类型(基本数值、基本数据类型)是一种既非对象也无方法的数据。在 JavaScript 中,共有7种基本类型:string,number,bigint,boolean,null,undefined,symbol (ECMAScript 2016新增)。

所有基本类型的值可以被替换,但不能被改变。变量会被赋予一个新值,而原值不能像数组、对象以及函数那样被改变。

// 使用字符串方法不会改变一个字符串
let str = 'str';
str.toUpperCase(); // str: str// 使用数组方法可以改变一个数组
let arr = [];
arr.push('element'); // arr: ['element']// 赋值行为可以给基本类型一个新值,而不是改变它
str = str.toUpperCase();       // str: STR

基本类型包装对象

JavaScript 的基本类型包装对象
除了 null 和 undefined之外,所有基本类型都有其对应的包装对象:

String 为字符串基本类型包装对象。
Number 为数值基本类型包装对象。
BigInt 为大整数基本类型包装对象。
Boolean 为布尔基本类型包装对象。
Symbol 为字面量基本类型包装对象。

这个包装对象的valueOf()方法返回基本类型值。

基本类型与基本类型包装对象的区别与联系

区别

基本类型的值是保存在栈内存中的简单数据段,它们是按值访问的,没有属性和方法。
引用类型的值是保存在堆内存中的对象,它的值是按引用访问的,对象是可以拥有属性和方法的。

联系

字面量定义和直接调用基本类型包装对象方法(没有通过 new 生成基本类型对象实例)的变量都是基本类型变量。

// 1.字面量定义
const str1 = 'str1';
// 2.调用基本类型包装对象方法(没有通过 new 生成基本类型对象实例)
const str1 = String('str2')

当基本类型变量需要调用一个基本类型包装对象才有的方法或者查询值的时候(基本类型是没有这些方法的),JavaScript 会自动将基本类型变量转化为基本类型包装对象并且调用相应的方法或者执行查询,执行完毕就会立即被销毁。

const str = 'str1';
str.toUpperCase();

参考文献:

  • MDN·原始数据
  • MDN·JavaScript 数据类型和数据结构

JavaScript 基本类型与基本类型包装对象相关推荐

  1. JavaScript读书笔记(三)布尔值,null,undefined,全局对象,包装对象

    参照内容来自<JavaScript权威指南> 布尔值 任意JavaScript的值都可以转换为布尔值. 部分值会被转换为false,其他转换为true. 会被转换为false的有:(1)u ...

  2. JavaScript(四)—— JavaScript 内置对象/JavaScript 简单数据类型与复杂类型

    本篇为 JavaScript 系列笔记第三篇,将陆续更新 JavaScript(一)-- 初识JavaScript / 注释 / 输入输出语句 / 变量 / 数据类型 JavaScript(二)-- ...

  3. Javascript基础回顾 之(一) 类型

    本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...

  4. JS(七)内置对象-简单类型与复杂类型

    1.内置对象 JavaScript 中的对象分为3种:自定义对象.内置对象.浏览器对象 前面两种对象是JS基础内容,属于ECMAScript : 第三种浏览器对象属于我们JS 独有的,属于JS API ...

  5. 说说javascript变量类型和变量类型检测

    为什么80%的码农都做不了架构师?>>>    javascript是一种弱类型语言,它的典型例子就是即变量在使用的时候可以给它赋值任何类型.那么先来看下javascript都有那些 ...

  6. php中常见的错误类型有,JavaScript中常见的错误类型有哪些?(详细介绍)

    在JavaScript中,当发生错误时会生成描述错误类型的错误对象,此错误对象包含错误类型和编号等信息,这些信息可用于后续处理等,在本篇文章中将给大家介绍常见的错误类型以及如何处理这些错误. Java ...

  7. JavaScript 为什么要有 Symbol 类型?

    摘要: 为什么比怎么用更有意义. 原文:JavaScript 为什么要有 Symbol 类型 作者:前端小智 Symbols 是 ES6 引入了一个新的数据类型 ,它为 JS 带来了一些好处,尤其是对 ...

  8. 实体类中用基本类型好,还是用包装类型

    实体类中用基本类型好,还是用包装类型好? 如果您也考虑这个问题欢迎指正我的观点,如果您正在考虑这个问题,欢迎评论一起讨论一下这个问题 刚才又想到了关于module或者实体类的建立的问题,用基本类型(i ...

  9. javascript包装对象

    js对象是一种复合值:它是属性或已命名值得集合. 参考以下代码: var s = "hello world"; var len = s.length; 在该例子中,s是字符串,而字 ...

最新文章

  1. Apache Flink不止于计算,数仓架构或兴起新一轮变革
  2. 嵌入式Linux裸机开发(六)——S5PV210时钟系统
  3. BugkuCTF-MISC题convert
  4. python 界面开发框架_八款常用的 Python GUI 开发框架推荐
  5. php去除两个重复,php – 如何从两个数组中删除重复对?
  6. 华罗庚先生教会我如何学习
  7. Atitit 索引法 html文件转txt纯文本索引 适用于 evernote索引,导入imap邮箱,方便检索 /sumdoclist/src/aPkg/html2txtIndexFile.jav
  8. yolov3 使用darknet的python接口使用
  9. fcm基本原理_fcm聚类算法原理及应用
  10. Ubuntu18.04安装专业版pycharm【免费】
  11. 极速还原 V4.0 简体中文绿色免费版
  12. 微型计算机显示器能源效率,【Mr. Green】加州计算机显示器能源效率规定
  13. 13丨性能测试场景:如何进行场景设计
  14. Apache服务器访问过慢分析及解决
  15. 深度学习各类性能指标含义解释
  16. Home Assistant 搭建日志(七)——安装NodeRed
  17. c语言作业做出金山打字功能,C语言小游戏之金山打字
  18. 如何进行一篇论文的阅读
  19. 【AIGC未来的发展方向】面向人工智能的第一步,一文告诉你人工智能是什么以及未来的方向分析
  20. 方直科技招聘测试经理和测试工程师(深圳)

热门文章

  1. Python爬虫入门推荐案例:学会爬虫_表情包手到擒来~
  2. 容器云系列之Docker容器监控工具WeaveScope
  3. 百度apollo自动驾驶planning代码学习-Apollo\modules\planning\common\DependencyInjector类代码详解
  4. 格莱富笔记本电脑教你笔记本电脑闪屏的解决方法
  5. Java源码转C 源码的五款最佳工具
  6. 1131. 拯救大兵瑞恩
  7. linux vim 强制退出 不保存
  8. RPA与AI、低代码、BPM既同场竞技,又融合共生
  9. Unity3D学习 ② 物体的正常跳跃、二段跳、冲刺
  10. 一些炫酷的插件源码分享