JavaScript---对象

对象是一个包含相关数据和方法的集合 。
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值