关于js对象的基础知识

一、对象属性的检测方法
1、in 运算符
2、hasOwnProperty()检测自有属性    (只有是自有属性才返回true)
3、propertyIsEnumerable()  检测可枚举的自有属性      (只有是可枚举的自有属性才返回true    注:对象继承的内置方法不可枚举)
4、!== 检测属性是否是undefined     (这种方法不能检测属性值为undefined)

*注:1、!==可以区分null和undefined,而!=不可以
        2、 如果属性值为undefined ,可以用in来进行检测
        3、如果一个对象中存在相同的属性名,则后定义的属性值将覆盖掉之前的属性值
        4、ES5提供的两个函数: Object.keys(obj)返回的是对象的可枚举的属性名组成的数组      Object.getOwnPropertyNames(obj)返回的是对象的所有自有属性名称组成的数组

二、枚举属性
1、for/in  枚举对象的属性

*注:in运算符可以检测自有和继承的属性,但for/in只能遍历出自有和继承的可枚举的属性
        eg:var o = {x:1};
               toString in o;   //返回true
               for(pro in o){
               console.log(pro);          //输出x ,却不会输出toString,因为toString不可枚举
               }
三、存取器属性 getter 和setter(其他为数据属性)

定义:var obj = {
          attr:value, //普通数据属性
          get fun(){函数体},
          set fun(value){函数体},       //get和set方法名相同,且没有冒号,之间用逗号分开
          attr1:value1,
}
obj.fun = 3;  //调用set方法,并传参赋值    ,返回值为undefined
obj.fun;   //调用get方法,无需参数   有返回值


四、属性的特性
1、数据属性的特性有四个:value(属性值)、writable(可写性)、enumerable(可枚举性)、configurable(可配置性)
2、存取器属性的特性有四个:get(可读)、set(可写)(是否可写看它是否有set方法)、enumerable(可枚举性)、configurable(可配置性)


3、为了描述属性的特性,ES5定义了一个“属性描述符(property descriptor)”的对象,该对象有四个属性,属性名和特性名相同

调用Object.getOwnPropertyDescriptor()可以获取对象特定属性的属性描述符   

*注:getOwnPropertyDescriptor只能获取自有属性的属性描述符,不能获取继承的属性的属性描述符,
要想获取 继承的属性的属性描述符就需要遍历原型链,Object.getPrototypeOf()

eg:console.log(Object.getOwnPropertyDescriptor(obj,"attr"))    //返回值自己测试一下即可得到

4、设置属性的特性
Object.defineProperty(对象,属性,属性描述符) ,属性描述符 不用四个都传,且对于新建的属性默认的特性值为false或undefined。Object.defineProperties()设置或修改对象的多个属性

*注:1、如果一个属性是不可写的但它是可配置的,就可以通过defineProperty来修改属性值
        2、defineProperty可以将数据属性转换成存取器属性
        3、 defineProperty 只能修改自有属性

五、对象的三个属性

1、原型属性
     通过对象直接量创建的对象,它的原型是Project.prototype
     通过构造函数new出来的对象,它的原型是构造函数.prototype
     通过Project.create创造出来的对象,它的原型是它的第一个参数

*注:  1、ES5中用Project.getPrototypeOf()来查询对象的原型,ES3中多用o.constructor.prototype来检测对象的原型
          2、可以用p.isPrototypeOf(o)来检测p是否是o的原型或处于o的原型链中  类似于运算符instanceof



2、类属性
到ES5为止,没有提供设置这个属性的方法,但可以间接的查询对象的类型性,即调用对象的toString()方法并截取返回的字符串的第8位至倒数第二位的字符,注意很多对象都会重写继承的toString()方法,所以我们要间接的调用Function.call()方法

*注:Object.prototype.toString返回的是[Object class]这种格式的字符串

3、可扩展性
可扩展性就是指是否可以给对象添加新属性,在ES5中,所有内置对象和自定义对象都是可扩展的
ES5定义了Object.esExtensible(o)查询对象的可扩展性,Object.preventExtensions(o)可将对象转换为不可扩展的, 并且这个转化是单向的,转化成不可扩展的就不能再转化回来了
*注:这个函数只影响对象本身,如果给这个对象的原型添加新属性,该对象仍然会继承这些新属性
        ES5定义了一些函数,这些函数是结合了对象的不可扩展和属性的不可配置等功能,实现了对象的“锁定”
        eg:1、Object.seal(o)    //它将对象设置为不可扩展的,并且将对象的自有属性设置为不可配置的,但控制不了属性的可写性,并且锁住了就不能进行解锁了, 可以用Object.isSealed()进行检查封锁性
                2、Object.freeze(o)   //更加严格的锁定,它设置对象为不可扩展,属性不可配置,不可写,变成只读的(存取器属性不受影响,getter和setter正常调用)

六、序列化对象
指将对象的状态转化为字符串
ES5定义了JSON.stringify()和JSON.parse()来序列化和还原js对象,都是以json格式进行转化的

七、对象方法
1、toString(),默认的对象的toString()方法返回值只是检测对象的类型,所以很多类都有自定义的toString方法
2、toLocalString(),Object对toLocalString()没有做本地化处理,返回的和toString()一样,只有Date和Number类对toLocalString()进行了定制
3、toJSON(),Object.prototype实际上没有定义该方法,但在对象序列化时就会自动调用此方法
4、valueOf(),将对象转换为原始值时会调用此方法,很多内置类也自定义了此方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值