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

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

//数组中

//Array
var arr = ['cat','pig','dog','monkey','fish'];
console.log(0 in arr);  //true
console.log(4 in arr);  //true
console.log(5 in arr);  //false
console.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);  //true
console.log('Tom' in cat);  //false
//必须指定一个对象在操作的右边,比如你可以使用字符串构造函数创建字符串,而不是指定字符串
var color1 = new String('green');
console.log('length' in color1);   //true
	
var 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);   //false
	
var 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;
	delete	obj.prop;
};
console.log(obj.hasOwnProperty('prop'));   // return true  自有属性存在prop
changeObj();
console.log(obj.hasOwnProperty('prop'));   // return false  自有属性不存在prop
console.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')); //false
	
console.log(({}).hasOwnProperty.call(obj,'bar')); //true
	
console.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); //false
console.log(cat.toString!==undefined);  //true 

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值