前端基础之For in遍历与hasOwnProperty()

本文详细介绍了JavaScript中的for...in遍历和hasOwnProperty()方法。for...in主要用于遍历对象属性,不适合数组,而hasOwnProperty()用于判断属性是否为对象的自有属性。文章通过示例展示了两者在实际开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 For in 遍历

for … in是为遍历对象属性而构建的,不建议与数组一起使用,数组可以用

示例

下面的函数接受一个对象作为参数。被调用时迭代传入对象的所有可枚举属性然后返回一个所有属性名和其对应值的字符串。

var obj = {a:1, b:2, c:3};

for (var prop in obj) {
 // console.log("obj." + prop + " = " + obj.prop);  //值都是undefined
  console.log("obj." + prop + " = " + obj[prop]);
  // "obj.a = 1"
  // "obj.b = 2"
  // "obj.c = 3"
}

注意:在其他地方访问属性可以用点.的方式,但是在for in遍历必须用中括号【】,如果不用中括号,会认为prop也是一个属性,所以都是undefined。

二、hasOwnProperty() 方法详解

hasOwnProperty(propertyName)是用来检测属性是否为对象的自有属性,如果是,返回true,否者false; 参数propertyName指要检测的属性名;

示例

let obj = {
    name:'张',
    age:18,
    eat:{
        eatname:'面',
        water:{
            watername:'水'
        }
    }
}
console.log(obj.hasOwnProperty('name')) //true
console.log(obj.hasOwnProperty('age'))  //true
console.log(obj.hasOwnProperty('eat'))  //true
console.log(obj.hasOwnProperty('eatname'))  //false
console.log(obj.hasOwnProperty('water'))  //false
console.log(obj.hasOwnProperty('watername'))  //false
console.log(obj.eat.hasOwnProperty('eatname'))  //true
console.log(obj.eat.hasOwnProperty('water'))  //true
console.log(obj.eat.hasOwnProperty('watername'))  //false
console.log(obj.eat.water.hasOwnProperty('watername'))  //true

注意:hasOwnProperty() 只会检查对象的自有属性,对象原形上的属性其不会检测;但是对于原型对象本身来说,这些原型上的属性又是原型对象的自有属性,所以原形对象也可以使用hasOwnProperty()检测自己的自有属性;

三、一般for in与hasOwnProperty是配套存在的

示例
			var obj1 = {
				a:1,
				b:2,
				c:3,
				__proto__:{
					lastName:"li"
				}
				
			};
			for (let prop in obj1){
				if (obj1.hasOwnProperty(prop)) {
					console.log(obj1[prop]); //遍历出 1 ,2 ,3 ,但没有继承来的属性__proto__的值lastName:"li"
				}
			}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值