对象是一个包含相关数据和方法的集合 。
1.对象的创建
对象的初始化有两种方式,构造函数模式和字面量模式
字面量模式
单个对象的创建
字面量 var obj={}
构造函数 var obj=new Object();//{}
2.对象的访问
属性访问方式也有两种,点访问、中括号访问
点访问 obj.name
中括号访问 obj[‘age’]
3.遍历对象
for(let key in obj){
key--键 属性名
obj[key]--值 属性值
}
var str='hjagsjfkahk';
for(let key of obj){
4.删除对象中的属性
只能删除对象的自有属性
5.Object显示类型转换(强制类型转换)
ECMAScript中可用的3种强制类型转换如下:
Boolean(value) 把给定的值转换成Boolean型;
String(value) 把给定的值转换成字符串。
转换规则:
显示转换与隐式转换规则类似,当要将对象转换为String时,类似隐式转换中的PreferredType为String
1.先调用对象的toString方法
2.判断该方法的返回值是否为基础数据类型(Number,String,Boolean,Undefined,Null)
3.若返回值为基础数据类型,则转换规则按照相应数据类型的转换规则对其进行转换
4.若返回值不为基础数据类型,则在该返回值的基础上继续调用valueOf方法
5.判断valueOf的返回值是否为基础数据类型
6.判断是否为基础数据类型,若是基础数据类型则进行操作3
7.若仍旧不为基础数据类型则报错
Number(value)把给定的值转换成数字(可以是整数或浮点数);
转换规则:
显示转换与隐式转换规则类似,当要将对象转换为Number时,类似隐式转换中的PreferredType为Number
1.先调用对象的valueOf方法
2.判断该方法的返回值是否为基础数据类型(Number,String,Boolean,Undefined,Null)
3.若返回值为基础数据类型,则转换规则按照相应数据类型的转换规则对其进行转换
4.若返回值不为基础数据类型,则在该返回值的基础上继续调用toString方法
5.判断toString的返回值是否为基础数据类型
6.判断是否为基础数据类型,若是基础数据类型则进行操作3
7.若仍旧不为基础数据类型则报错
6.检测属性
检测一个属性是否属于某个对象。常用的方式主要有3种:
in :检测某属性是否是某对象的自有属性或者是继承属性 (不是原型方法)
‘name’ in obj ‘valueOf’ in obj
Object.prototype.hasOwnProperty()
检测给定的属性是否是对象的自有属性,对于继承属性将返回false
obj.hasOwnProperty(‘valueOf’);//false
Object.prototype.propertyIsEnumerable()
propertyIsEnumerable()是hasOwnProperty()的增强版,除了是自身属性外,还要求是可枚举属性(即可删除的),即我们创建的属性。
obj={
name:“zhangsan”,
age:12
}
7.Object原型属性及方法(原型方法,实例可以调用的方法)
每个构造函数都有一个原型对象,原型对象都包含一个指向构造函数的指针,实例都包含一个指向原型对象的内部指针。 —《JavaScript高级程序设计》
原型:每一个构造函数都有一个原型对象,原型对象都有一个指针(constructor)指向构造函数
实例有一个指针(__proto__)指向原型对象
静态方法:只能由构造函数本身去调用
Object.defineproperty()
实例/原型方法:存在原型对象中得方法 valueOf() toString() constructor
Object原型中常用的方法:
constructor
保存用户创建当前对象的函数,与原型对象对应的构造函数
hasOwnProperty(propertyName)
检查给定的属性名是否是对象的自有属性
propertyIsEnumerable(propertyName)
检查给定的属性在当前对象实例中是否存在
valueOf()
返回对象的字符串,数值,布尔值的表示
toLocaleString()
返回对象的字符串表示,该字符串与执行环境的地区对应
toString()
返回对象的字符串表示
isPrototypeOf(object)
检查传入的对象的原型
a.isPrototypeOf(b) 如果a是b的原型,则返回true。如果b不是对象,或者a不是b的原型,则返回false。
8 深入理解对象属性
数据属性与访问器属性区别?
数据属性:相当于给当前对象定义了一个公共属性,访问修改直接返回value值;
访问器属性:可以控制访问或修改这个属性的具体行为;
数据属性:
1. Configurable 表示是否可删除
2.Enumerable 表示是否可枚举
3.Writable 表示是否可修改
4.Value 属性的属性
要修改/定义一个属性特性,必须使用defineProperty(目标对象,目标属性,{配置数据属性})
要修改/定义多个属性特性,使用defineProperties(目标对象,{配置多个属性})
获取对象的所有自身属性的描述符
获取一个:
getOwnPropertyDescriptor(目标对象,目标属性)
获取所有:
getOwnPropertyDescriptors(目标对象)
访问器属性:
1.Configurable 是否可删除 默认false
2.Enumerable 是否可枚举 默认false
3.Get 读取属性调用的函数
4.Set 设置属性调用的函数
var book={
_year:2022
}
Object.defineProperty(book,‘year’,{
get(){
return this._year
},
set(newYear){
if(newYear<=2022){
this._year=newYear
}
}
})
console.log(book.year);
book.year=2021;
console.log(book.year);
9对象序列化和反序列化
JSON.stringify();将对象转化为json字符串
{
"name":"zhangsan",
"age":12
}
JSON.parse();将json字符串转化为对象
————————————————
版权声明:本文为CSDN博主「头发尚在——」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_46677484/article/details/126254850