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
}
原文地址:https://www.cnblogs.com/dsitn/p/7060691.html