javascript对象如何遍历所有属性

javascript对象遍历属性主要用for…in循环配合hasownproperty()过滤继承属性;1. for…in结合hasownproperty()可遍历自身可枚举属性;2. object.keys()返回自身可枚举属性数组,适合foreach遍历;3. object.getownpropertynames()返回所有自身属性(含不可枚举);4. reflect.ownkeys()返回所有自身属性,包括symbol和不可枚举属性;需根据是否可枚举、是否继承、是否包含symbol等需求选择方法,避免误遍历原型链属性。

javascript对象如何遍历所有属性

直接告诉你:JavaScript 对象遍历所有属性,主要用

for...in

循环,配合

hasOwnProperty()

方法过滤掉继承来的属性。当然,

Object.keys()

Object.getOwnPropertyNames()

也能派上用场,各有千秋。

javascript对象如何遍历所有属性

解决方案:

for...in

循环遍历对象属性,并用

hasOwnProperty()

检查属性是否是对象自身的。

立即学习“Java免费学习笔记(深入)”;

javascript对象如何遍历所有属性

const myObject = {  a: 1,  b: 2,  c: 3};for (let key in myObject) {  if (myObject.hasOwnProperty(key)) {    console.log(`属性: ${key}, 值: ${myObject[key]}`);  }}
Object.keys()

返回一个包含对象所有自身可枚举属性名称的数组,然后用

forEach

或者

for

循环遍历。

const keys = Object.keys(myObject);keys.forEach(key => {  console.log(`属性: ${key}, 值: ${myObject[key]}`);});
Object.getOwnPropertyNames()

返回一个包含对象所有自身属性(包括不可枚举属性)名称的数组。这方法比较彻底,啥都能拿到。

javascript对象如何遍历所有属性

const propertyNames = Object.getOwnPropertyNames(myObject);propertyNames.forEach(propertyName => {  console.log(`属性: ${propertyName}, 值: ${myObject[propertyName]}`);});
Reflect.ownKeys()

,它会返回一个数组,包含对象自身的所有属性,不管是不是可枚举的,也不管是不是 Symbol 类型的。

const allKeys = Reflect.ownKeys(myObject);allKeys.forEach(key => {  console.log(`属性: ${key}, 值: ${myObject[key]}`);});

为什么要用

hasOwnProperty()

过滤继承属性?

JavaScript 里,对象是通过原型链继承属性的。不用

hasOwnProperty()

for...in

循环会把原型链上继承来的属性也给你遍历出来,这通常不是我们想要的。例如:

Object.prototype.inheritedProperty = function() {  console.log("我是继承来的属性");};const myObject = {  a: 1,  b: 2};for (let key in myObject) {  console.log(key); // 输出 a, b, inheritedProperty}for (let key in myObject) {  if (myObject.hasOwnProperty(key)) {    console.log(key); // 只输出 a, b  }}

所以,为了只关注对象自身的属性,

hasOwnProperty()

是个好帮手。

Object.keys()

Object.getOwnPropertyNames()

有什么区别

Object.keys()

只返回可枚举的自身属性,而

Object.getOwnPropertyNames()

返回所有自身属性,包括不可枚举的。啥叫可枚举?简单来说,就是能不能被

for...in

循环遍历出来。举个例子:

const myObject = {};Object.defineProperty(myObject, 'a', {  value: 1,  enumerable: true // 可枚举});Object.defineProperty(myObject, 'b', {  value: 2,  enumerable: false // 不可枚举});console.log(Object.keys(myObject)); // 输出 ["a"]console.log(Object.getOwnPropertyNames(myObject)); // 输出 ["a", "b"]

什么时候应该用哪种遍历方法?

只需要可枚举的自身属性:

for...in

循环 +

hasOwnProperty()

或者

Object.keys()

需要所有自身属性(包括不可枚举的):

Object.getOwnPropertyNames()

或者

Reflect.ownKeys()

需要考虑 Symbol 类型的属性: 只能用

Reflect.ownKeys()

,因为它能拿到所有类型的属性。

实际开发中,根据具体需求选择合适的遍历方法,别一股脑全用

for...in

,小心踩坑。

以上就是javascript对象如何遍历所有属性的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1514430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月20日 08:27:38
下一篇 2025年12月20日 08:27:58

相关推荐

发表回复

登录后才能评论
关注微信