javascript属性操做

属性的读写


 

 

//属性添加
var obj = {x:1,y:2}; obj.z = 3; obj["m"] = 4;

 

//属性的读取
var obj =  {x: 1, y: 2, z: 3, m: 4}; for(p in obj){ console.info(p); }

 属性的删除


 

var person = {age:45,name:"tom"}; person.age //45

delete person.age   //true
 person.age //undefined

属性标签【configurable】

 

var obj = {age:1,name:"cat"}; Object.getOwnPropertyDescriptor(obj,'age');    

//Object {value: 1, writable: true, enumerable: true, configurable: true}; //getOwnPropertyDescriptor()方法--查看age的属性标签 Object.defineProperty(obj,'age',{configurable:false});

//设置age属性configurable标签为false【表示age属性不可配置】 Object.getOwnPropertyDescriptor(obj,'age'); Object {value: 1, writable: true, enumerable: true, configurable: false}; delete obj.age //false obj.age //1

 

不能删除的特殊状况


 

 1 var定义的全局变量与局部变量

var globalValue = 90; delete globalValue  //false
 (function(){ var localValue  = 90; return delete localValue; })(); //false

//隐式的建立全局变量是能够删除的
yinshi = 90;

delete yinshi  //true
 

 

 

 

2 全局定义函数与局部定义的函数

function test(){} delete test;   //false
 (function(){ function localfunction(){}; return delete localfunction;   //false
})();

 

判断属性是否存在


 

var dog = {}; dog.name = "dong"; dog.age = 89; "name" in dog;  //true

"abc" in dog  //false

"toString" in  dog //true //in操做符 会查找原型链。
 dog.hasOwnProperty('name');  //true
 dog.hasOwnProperty('toString');  //false 不查找原型链用hasOwnProperty方法

属性的枚举


 

var o = {x:1,y:2,z:3} for(key in o){ console.info(key) //x y z
}

Object.keys(o) //["x", "y", "z"]

 

【Enumerable】属性标签


 

var o = {x:1,y:2,z:3} //propertyIsEnumerable 检测属性的【Enumerable】为true or false
 o.propertyIsEnumerable('x')  //true
 o.propertyIsEnumerable('y')  //true
 o.propertyIsEnumerable('z')  //true
 o.propertyIsEnumerable('toString') //false


//只有propertyIsEnumerable为true的属性,能够枚举
for(key in o){ console.info(key) //x y z
}

 

var o = {x:1,y:2,z:3} //设置对象的x属性【enumerable】标签为false
 Object.defineProperty(o,'x',{enumerable:false}) o.propertyIsEnumerable('x')  //false

for(key in o){ console.info(key) //y z
}
相关文章
相关标签/搜索