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
}
相關文章
相關標籤/搜索