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字符串转化为对象

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值