javascript检测对象中是否存在某个属性

来源:互联网 发布:淘宝买刀剑会被扣留不 编辑:程序博客网 时间:2024/05/16 14:17
检测对象中属性的存在与否可以通过几种方法来判断。

方法一:使用in关键字

该方法可以判断对象的自有属性和继承来的属性是否存在(in能检测到原型链的属性)
var cat = {name:'Tom'};console.log('name' in cat);  //true  自有属性存在console.log('weight' in cat); //falseconsole.log('toString' in cat);  //true   继承属性存在
in关键字的使用

//数组中

//Arrayvar arr = ['cat','pig','dog','monkey','fish'];console.log(0 in arr);  //trueconsole.log(4 in arr);  //trueconsole.log(5 in arr);  //falseconsole.log('pig' in arr);  //false   必须指定索引号,而不是该索引的值console.log('length' in arr);  //true  length为该数组的属性
//预定义对象
console.log('PI' in Math);   //true
//自定义对象
var cat = {name:'Tom',year:10};console.log('name' in cat);  //trueconsole.log('Tom' in cat);  //false
//必须指定一个对象在操作的右边,比如你可以使用字符串构造函数创建字符串,而不是指定字符串
var color1 = new String('green');console.log('length' in color1);   //truevar color2 ='green';console.log('length' in color2);   //报措color2 is not a String object
//若使用delete删除属性,in操作将返回假
var cat = {name:'Tom',year:10};delete cat.year;console.log('year' in cat);   //falsevar arr = ['cat','pig','dog','monkey','fish'];delete arr[0];console.log(0 in arr);   //false
//如果将某个属性设置为未定义但是不删除它,in操作将返回真
var cat = {name:'Tom',year:10};cat.year = undefined;console.log('year' in cat);   //true

方法二:.使用对象的hasOwnProperty()方法

var obj = new Object();obj.prop = 'exist';function changeObj(){obj.newProp = obj.prop;deleteobj.prop;};console.log(obj.hasOwnProperty('prop'));   // return true  自有属性存在propchangeObj();console.log(obj.hasOwnProperty('prop'));   // return false  自有属性不存在propconsole.log(obj.hasOwnProperty('toString'));  //return false   这是一个继承属性
hasOwnProperty的使用

//对象属性迭代

var cat = {Name:'Tom'};for(var name in cat){if(cat.hasOwnProperty(name)){alert('这只cat'+name+'的名字是'+cat[name]);}else{alert(name);}}

//使用hasOwnProperty作为属性名

var obj = {  hasOwnProperty: function(){    return false;  },  bar: 'Hello'};console.log(obj.hasOwnProperty('bar')); //falseconsole.log(({}).hasOwnProperty.call(obj,'bar')); //trueconsole.log(Object.prototype.hasOwnProperty.call(obj, 'bar'));<span style="font-family: Arial, Helvetica, sans-serif;">//true</span>

方法三:.使用undefined方法

自有属性和继承属性均可判断。
var cat = {name:'Tom'};console.log(cat.name!==undefined);  //true  console.log(cat.weight!==undefined); //falseconsole.log(cat.toString!==undefined);  //true 

该方法存在一个问题,如果属性的值就是undefined的话,该方法不能返回想要的结果,如下。

var cat = {name:'undefined'};console.log(cat.name!==undefined);  //false   属性存在 但是值是undefined  console.log(cat.weight!==undefined); //falseconsole.log(cat.toString!==undefined);  //true   


1 0
原创粉丝点击