05—js对象

本文详细介绍了JavaScript中的对象概念,包括对象的定义、创建方式(如json模式、实例化和Object.create()),对象属性的操作(访问、添加、修改和删除),内存管理,以及深浅拷贝和对象遍历。同时涵盖了对象序列化的概念和注意事项。
摘要由CSDN通过智能技术生成

一、初识对象

JavaScript是面向对象编程(Object Oriented Programming,OOP)语言。

面对象是一种复合值:它将很多值集合在一起,可通过名字访问这些值。对象也可看做一种无序的数据集合,由若干个“键值对”(key-value)构成。

对象是一个容器,封装了“属性”(property)和“方法”(method)。

属性,就是对象的状态,而方法,就是对象的行为。

比如:我们可以把一辆汽车抽象成一个对象,它的属性就是它的颜色、重量等,而方法就是它可以启动、停止等。

二、创建对象

1.json模式创建对象,使用对象字面量创建对象

//对象定义的规则:

//将左花括号与类名放在同一行。

//冒号与属性值间有个空格。

//字符串使用双引号,数字不需要引号。

//最后一个属性-值对后面不要添加逗号。

//注意:对象直接量中的最后一个属性后的逗号可有可无,但是在ie中,如果多了一个逗号,会报错

//将右花括号独立放在一行,并以分号作为结束符号

var  a={name: ”小米”,age: ”22”};

在ECMAScript 5中,保留字可以用做不带引号的属性名。

2.直接实例化方式

//使用new关键字实例化对象

//使用typeof检查一个对象时,会返回object

Var a=new Object(); 

3.Object.create()函数创建。

Var a=object.create(null);

(其它创建对象方式:工厂模式创建对象,原型模式创建对象,组合模式创建对象)

键名:

  1. 键名:对象的所有键名都是字符串,所以加不加引号都可以。如果键名是数值,会被自动转为字符串。
  2. 属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性。
  3. 对象属性名不强制要求遵守标识符的规范,(obj.var=’hello’;)什么乱七八糟的名字都能用,但还是建议按规范做

函数也可以作为对象属性,如果一个函数作为对象的属性,我们可以说这个函数是这个对象的方法,调用函数可以说调用对象的方法

键值:

  1. 对象的每一个“键名”又称为“属性”(property),它的“键值”可以是任何数据类型。
  2. 对象的属性值,可以是任意数据类型,甚至可以是一个对象
  3. 如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。

如果键名不符合标识名的条件(比如第一个字符为数字,或者含有空格或运算符),也不是数字,则必须加上引号。否则会报错

三、对象属性的操作 

1.访问对象属性

在JavaScript中,我们可以通过点(.)或方括号([])运算符来获取属性的值。

语法:对象.属性名

// 1、访问对象属性  .  []
			console.log(obj.name)
			// 我们通过people2 里面的say方法调用了函数abc
			console.log(people2.say());		
			console.log(people2["sex"]);		
			console.log(obj[1]);
			console.log(obj);

注意:数值键名(特殊属性名)不能使用点运算符(因为会被当成小数点),只能使用方括号运算符。

JavaScript对象是动态的,可新增属性也可删除属性。但注意,我们是通过引用而非值来操作对象

2.对象添加属性

语法:对象.属性名=新增值;

3.对象属性修改

语法:对象.属性名=新值;

4.对象属性删除

语法:delete 对象.属性名;

		delete people2.name;
			console.log(people2);	// 4、对象属性的删除 delete 对象.属性名;
			delete people2.name;
			console.log(people2);

注意:delete运算符只能删除自有属性,不能删除继承属性。

删除一个不存在的属性,delete不报错,而且返回true。

只有一种情况,delete命令会返回false,那就是该属性存在,且不得删除。

5.检测属性是否是该对象的属性

在JavaScript中,有多种方法检测某个属性是否存在于某个对象中

1》In运算in运算符左侧是属性名(字符串),右侧是对象。如果对象的自有属性或继承属性中包含这个属性就返回true。

Var o={name:’张全旦’}
Console.log(‘name’in  o);  //true

2》hasOwnPreperty()方法

Console.log(o.hasOwnPreperty(‘name’));  //true

3》propertyIsEnumerable()方法

Console.log(o.propertyIsEnumerable(‘name’));  //true

 

6.查看所有属性

查看一个对象本身的所有属性,可以使用Object.keys方法,返回一个数组。

Console.log(Object.keys(o));  //[name]

四、内存问题

Js中的变量都是保存在栈内存中存储,值与值之间都是相互独立的修改某个变量不会影响到之前复制过他的变量;

Js中的对象是保存在堆内存中的,每创建一个新的对象就会在堆内存中开辟内存空间,而变量保存的是内存地址(对象的引用),当通过一个变量修改内部属性时,复制或者引用的变量也会被影响。

 

  • 深拷贝和浅拷贝:

浅拷贝:对于引用类型而言,之两个引用类型指向同一个地址,改变一个另一个也会随之改变

深拷贝:对于引用类型而言,复制后引用类型指向一个新的内存地址,两个对象改变相互不影响

五、遍历对象

  • for...in循环用来遍历一个对象的全部属性

Var o={
name:’王二狗’,
age:20,
 gender:’男’}
//for...in 遍历拿到的是对象的索引(键名)
for(var i in o){
Console.log(o[i]);
}

 

六、序列化对象

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

在JavaScript中,提供了内置函数JSON.stringify()和JSON.parse()用来序列化和还原JavaScript对象。
NaN、Infinity和-Infinity序列化的结果是null

注意:JSON.stringify()只能序列化对象可枚举的自有属性。对于一个不能序列化的属性来说,在序列化后的输出字符串中会将这个属性省略掉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>