深入理解 Object对象属性
一.实例化Object对象
1.字面量形式
var person1 = {
name: '张三'
};
2.Object
构造器的形式
var person2 = new Object();
person2.name = '李四';
二.对Object进行简单操作(增 删 改 查)
var obj1 = {}
obj1.name="张三" //增添属性
delete obj1.name //删除属性
obj1.name="李四" //修改属性
console.log(obj1['name'])等价于 console.log(obj1.name) //查找name属性
判断是否存在name属性 if_in
if('name' in obj1){
console.log('存在')
}else{
console.log('不存在')
}
三.遍历实例的属性
默认情况下,我们添加到对象上的属性都是可枚举的,这样的话我们就可以使用for-in
循环遍历它们
1.遍历对象,获取到属性和其对应的值
var obj = {
name: '张三',
age: 23,
gender: '男',
address: '武汉'
};
var propertyName;
for (propertyName in obj){
console.log('属性名:' + propertyName);
console.log('属性值:' + obj[propertyName]);
}
如果我们只是想获取一个对象中的所有属性名,可以使用Object.keys()
方法。该方法会以数组的形式返回所有的属性名
console.log(Object.keys(obj)); // ["name", "age", "gender", "address"]
2.获取input中的值并生成对象
<input type="text" name="name" value="李四"/>
<input type="text" name="age" value="17"/>
<input type="text" name="gander" value="男"/>
var data ={}
var inputs = document.querySelectorAll('input')
for(var i=0;i<inputs.length;i++){
data[inputs[i].name] = inputs[i].value
// console.log(inputs[i].name)
}
// console.log(data)
四.属性的分类
属性的类型分两种:一种是数据属性,一个种是访问器属性
数据属性用来存储一个值
访问器属性不包含值,而是定义了一个get
和set
函数,当读取属性时,调用get
函数,当写属性时,调用set
函数。
使用字面量的形式定义访问器属性的语法:
注意get 和set 的用法!
var obj1 = {
name: '周扒皮',
age: 1001,
__id: 564813245966,
get id() {
return this.__id;
},
set id(newId) {
this.__id = newId;
}
}
// console.log(obj1.id)
obj1.id = 168287879900;
// console.log(obj1.id)
五.属性的内部特性
共享的属性:
Enumerable:true/false //是否可遍历
Configurable:true/false //是否可配置
改变属性的特性:
Object.defineProperty(obj, 'name',{}) //改变单个属性
var obj01 = {
name:'张三丰',
age:83,
gander:'男'
}
Object.defineProperty(obj01,'name',{
enumerable:true,
configurable:true,
writable: false //是否可修改
})
// console.log(obj01.propertyIsEnumerable('name'));
Object.defineProperties(obj, {}) //改变多个属性
var stro1 = {}
Object.defineProperties(stro1,{
name:{
value:'李三婆',
enumerable:false,
configurable: true,
writable: true
},
age:{
value:87,
enumerable:true,
configurable:true,
writable: false
},
__address:{
value:{},
enumerable:true,
configurable:true,
writable:true
},
address:{
get:function(){
return this.__address
},
set:function(newAddress){
this.__address = newAddress
}
}
})
stro1.address='郑州'
// console.log(stro1.address)
var descriptor = Object.getOwnPropertyDescriptor(stro1, 'address'); //获取单个属性内部的特性
//console.log(descriptor)
六.获取属性的内部特性
1.获取单个
Object.getOwnPropertyDescriptor()
2.获取多个
Object.getOwnPropertyDescriptors()