对象与堆栈的描述

本文详细介绍了JavaScript中的对象,包括创建、访问、遍历、删除和新增对象属性的方法。此外,还讨论了引用数据类型的值传递特性以及对象的序列化和反序列化。通过JSON.stringify()和JSON.parse()进行转换,并探讨了内存空间中的堆栈区分和数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是对象?

一组数据(属性)和功能(方法)的集合

创建对象的两种方法

1、构造函数模式
使用Object或者使用自定义构造函数来初始化对象(例如Student)
var obj = new Object();
obj.name = “terry”;
//等价于 <==>
var obj={};
obj.name=“terry”;
obj.age=12;

2、字面量模式 {}
var obj = {
name:“terry”,
age:12,
sayName:function(){
console.log("my name is ",this.name);
}
}
访问对象属性的访问 ①:.表示法 obj.name
②【】表示法 obj[‘name’]
方法的访问 obj.sayName; //function
obj.sayName(); //方法的使用 执行函数内部内容
遍历
普通版的for循环可以遍历数组,但无法遍历对象
增强版的for循环:
for…in…用于遍历数组或者对象的属性

for(自定义变量名  in  数组/对象){
	执行代码
}

for…in可以来枚举对象的属性
对象中有几个属性,循环体就会执行几次,每次执行时,会将对象中的一个属性名赋值给自定义的变量,对象[自定义变量]来获取属性值

新增删除:
只能删除对象的自有属性,不能删除继承属性。在销毁对象时,为了防止内存泄露,遍历对象中的属性,依次删除所有属性。
delete obj[“proname”]
delete obj.sayName //从obj对象中删除sayName属性
新增
obj.newproname=”value”
修改
可以直接点表示法覆盖

检测属性*

in 检测某属性是否是某对象的自有属性或者是继承属性
hasOwnProperty() 检测给定的属性是否是对象的自有属性返回true,其他属性返回false
propertyIsEnumerable() 检测给定的属性是否是该对象的自有属性 ,可枚举属性 。自己创建的,返回true。通常由JS代码创建的属性都是可枚举的,但是可以使用特殊的方法改变可枚举性

Object属性及方法

in 检测某属性是否是某对象的自有属性或者是继承属性
Object 类型所具有的任何属性和方法也同样存在于其他对象中,任何对象继承于Object对象。Object中常用的方法:
constructor: //保存用户创建当前对象的函数
hasOwnProperty(propertyName); //检查给定的属性名是否是对象的自有属性,
toString(); //返回对象的字符串表示
valueOf(); //返回对象的字符串,数值,布尔值的表示。
propertyIsEnumerable(propertyName); //检查给定的属性在当前对象实例中是否存在
isPrototypeOf(object); //检查传入的对象是否是原型
toLocaleString(); //返回对象的字符串表示,该字符串与执行环境的地区对应
**

对象序列化和反序列化

对象序列化是指将对象的状态转换为字符串,也可以反序列化,将字符串还原为对象函数。

1.将对象的状态转换为JSON字符串
JSON.stringify() 只能序列化对象可枚举的自有属性。
2.将JSON字符串转换为对象
JSON.parse()

内存空间:堆区 栈区

 栈  先进后出  
 堆  在堆中存放的变量位置是不确定的

基本数据类型的变量和值存放到栈区
引用数据类型变量存放在栈区,引用内存地址存放在栈区,内容存放在堆区
1.引用传递/址传递
引用数据类型使用引用传递/地址传递
不能直接操作对象的内存空间,实际上是在操作对象的引用。可以为引用类型变量添加属性和方法,也可以改变和删除其属性和方法。
var obj={
name:“zhangsan”,
age:12
}
var obj2=obj;
console.log(obj,obj2);
obj2.name=“lisi”;
console.log(obj,obj2);

值传递:不受影响
引用传递:受影响, 内存堆中的地址的值

2.值传递
基本数据类型使用值传递
var a=1;
var b=a;
console.log(a,b)
b=2;
console.log(a,b)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值