js中“万物皆对象”?

本文探讨了JavaScript中的基本数据类型(Undefined, Null, Boolean, Number, String, Symbol)与复杂数据类型(Object)的区别,包括存储方式、赋值操作和对象的动态性。特别关注了包装对象的概念,解释了它们如何与普通引用类型在生命周期和行为上的差异。
摘要由CSDN通过智能技术生成

JS中的数据类型有下面几种:

  • Undefined

  • Null

  • Boolean

  • Number

  • String

  • Symbol (ES6中新增)

  • Object

其中前六种是基本数据,最后一种是复杂数据类型

但是区别在哪里那?

  1. 对象可以动态添加属性和方法,而基本数据类型不可以:
// 基本类型 Number
var num1 = 1000;
num1.length = 10;
console.log(num1.length); //undefinded 

// 对象类型 Array
var arr1 = [];
arr1.length = 10;
console.log(arr1.length); //10

2.存储方式和赋值操作的方式不同:

  • 基本类型:初始化一个值类型实例的时候,实际上是给这个值分配了一个内存空间来保存,当进行赋值操作的时候,新的实例会开辟一块新的内存空间,然后将原来的值copy 到了这个新的内存空间中;

  • 引用类型:初始化一个引用类型实例的时候,仅仅是把这个实例的值所在内存空间的引用赋给这个实例,当copy 给了新的实例对象使,实际上是copy 了对这块内存空间的引用,两个实例对象本质上共用一块内存空间。

// 基本类型 Number
//当num1的值赋给num2,之后再改变num2的值,对num1无影响
var num1 = 1;
var num2 = num1;
num2 = num2 + 1
console.log(num1);  // 1


// 引用类型 Array
//当arr1的值赋给arr2,之后再改变arr2的值,arr1的值也同样改变。
//因为arr1和arr2公用同样的数据。
var arr1 = [];
var arr2 = arr1;
arr2.push('oujm')
console.log(arr1);  // ["oujm"]

3.对象和包装对象

包装对象(String,Number,Boolean),ECMAScript提供了这三个特殊的引用类型,这三个引用类型和其他的引用类型相似,但同时也具有于各自的基本类型相应的特殊行为,实际上,每当读取一个基本类型的时候,后台就会创建一个对应的基本包装类型的对象。

为了让我们更好的操作基本类型的实例对象,后台进行了一系列的操作:

  1. 创建String的实例

  2. 在实例上调用指定的方法

  3. 销毁这个实例

// var str2 = str1.substring(2) 动作拆解:

var tempStr = new String("oujm");
var str2 = tempStr.substring(2);
tempStr = null;

一般的引用类型和包装类型唯一的区别就在于对象的生命周期。包装类型的对象生命周期很短,只有代码执行的一瞬间,然后就被销毁了,所以这也就是为什么我们不能在运行的时候为基本类型的值添加属性和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

几个高兴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值