前言
在javascript中, 对象是我们都在用的, 但是呢,并不是每个人都对Object十分了解。 本文也是在自己对Object记忆有点模糊之后,重新复习的产物。
对象的操作
关于说对象是啥, 这里就不赘述了。 直接入正题。
关于对象, 我们一般会进行哪些操作?
1. 对象的创建
2. 对象属性及属性值的设置
3. 对象属性值的获取、修改
4. 对象的遍历
5. 对象属性的删除
6. 对象属性本身的配置
以上就常常出现的几种操作。
操作详解
对象的创建
对象的常见有三种方法: 1. 对象直接量 var obj = {test: 'test'} 2. 关键字new new调用构造函数 3. Object.create() 该方法传入两个参数, 一个对象的原型, 一个是对象自己的描述
对象属性及属性值的操作
通过“.”“[]”运算符进行属性的添加,修改,获取属性值。
3.属性的删除
使用delete运算符,删除对象的属性,delete只是断开属性和宿主对象的联系, 而不会去操作属性中的属性
delete obj.test
3. 属性值的遍历
ES3之前使用for/in方法进行遍历, 但是会遍历原型上的属性,
这样是好的, 所以需要使用hasOwnProperty方法来判断是否是自己而非原型上的属性。
例如:
for(p in obj){
if(!o.hasOwnProperty(p)) continue
//做些操作
}
ES5提供了两个新的方法用于遍历:
Object.keys(obj), 返回obj对象上可枚举的属性组成的数组
Object.values, 返回obj对象上可枚举属性的属性值组成的数组
Object.getOwnPropertyNames()返回所有包括不可遍历的属性名组成的数组
4. 对象属性本身的配置
一个对象的属性, 包括了四个特性:属性值(value)、可写性(writable)、可遍历性(enumerable)、可配置性(configurable)
使用Object.getOwnPropertyDescriptor()可以获取某个对象特定属性的属性描述:
Object.getOwnPropertyDescriptor(obj, 'test')
返回结果如下:
{configurable:false,enumerable:false,value:"123",writable:false}
使用Obejct.getOwnPropertyDescriptors()返回所有属性的描述:
Object.getOwnPropertyDescriptors(obj)
返回结果如下:
{
test:{configurable:false,enumerable:false,value:"123",writable:false}
test1:{configurable:false,enumerable:false,value:"123",writable:false}
}
使用Object.defineProperty()来对特性进行设置:
Object.defineProperty(obj, 'test', {
value: 1,
writable: true,
enumerable: false,
configurable: true
})
对象的三个属性
原型属性
原型属性是用来继承原型的。 可用getProperyOf来获取原型。 也可以通过__proto__属性来获取
类属性
描述对象的类型信息的。 使用toString可以放回该属性值(Object.property上的toString)。
可扩展性
表示是否可以给对象添加新的属性。 通过Object.isExtensible()判断是否可扩展 通过Object.preventExtensions()将对象变为不过扩展 通过Object.seal()将对象设置不可扩展, 并将属性设置为不可配置 通过Object.isSeal()查看对象是否封闭 通过Object.freeze()将对象设置为不可配置, 还将自身所有数据属性设置为 通过Object.isFreeze()查看对象是否冻结
结尾
文本中的那些方法:
1. Object.create
2. delete obj.test
3. for/in
4. Object.keys
5. Object.values
6. Object.getOwnPropertyNames
7. Object.getOwnPropertyDescriptor
8. Object.getOwnPropertyDescriptors
9. Object.defineProperty
10. Object.definePropertys
11. Object.getPropertyOf
12. Object.isExtensible
13. Object.preventExtensions
14. Object.seal
15. Object.isSeal
16. Object.freeze
17. Object.isFreeze
方法有点多, 理解记忆即可