【面试题集—No.03】获取对象属性的个数

本文介绍了三种获取JavaScript对象属性的方法,包括封装函数、在原型上添加方法和返回属性字符串数组。内容涉及对象的自身属性、可枚举属性、可迭代属性等概念,以及`for...in`和`for...of`的区别。

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

💚写在前面:在解决这个问题之前,我们需要知道对象的属性分为:自身属性和继承属性;可枚举属性;可迭代属性;以symbol为属性值的属性。我们使用不同的AP所I获得的属性不同。

获取对象属性相关的API

hasOwnProperty() 判断是否是自身属性                                                【返回 布尔值】

Object.keys() 获取自身可枚举属性(for..in 的原理)                      【返回 数组】

Object.getOwnPropertyNames() 获取自身可枚举和不可枚举属性        【返回 数组】

for...in 获取自身和继承的可枚举属性( 除去symbol )( 配合使用hasOwnProperty()

for...of 获取自身可迭代属性的值

👉for...in和for...of的区别

方法一 -- 封装一个函数调用【for...in

function attributeCount(obj){
    var count=0;
    for(var k in obj){
        count++;
    }
    return count;
}
var testObj={
    name1:'value1',
    name2:'value2'
}
console.log(attributeCount(testObj));    //结果是:2

方法二 -- 在给对象原型添加方法【for...in + hasOwnProperty()

function TestObj(name,age){
    this.name=name,
    this.age=age
}
TestObj.prototype.attributeCount=function(){
    var count=0;
    for(var k in this){
        if(this.hasOwnProperty(k)){     //需要判断,因为扩展了属性
            count++;    
        }
    }
    return count;   
}
var testObj=new TestObj('chailo',12);
console.log(testObj.attributeCount());    //结果是:2

//如果不加 hasOwnProperty() 判断,输出结构为3。因为再继承的原型对象上增加了一个方法attributeCount()

在这里再次啰嗦介绍一下hasOwnProperty(),这个方法返回一个布尔值,可以用来检测一个对象是否含有特定的自身属性,会忽略掉那些从原型链上继承到的属性。

方法三 -- 返回属性组成的字符串数组【Object.getOwnPropertyNames()

var testObj={
    name1:'value1',
    name2:'value2'
}
console.log(Object.getOwnPropertyNames(testObj).length);        //计算数组长度
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值