JavaScript 基本类型与基本类型包装对象

问题思考

阅读以下代码:

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();

参考文献:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值