如何返回对象的所有属性及其值,包括可迭代的,自定义的和继承的

How to return all properties and their values of an object including iterable ones, custom ones and inherited ones?

本文关键字:包括可 迭代 继承 自定义 何返回 返回 对象 属性      更新时间:2023-09-26

到目前为止,我学到了:

1) for循环,我可以使用它来迭代对象中的索引,例如具有数字索引的键的数组。

2) for..in循环为我提供了可迭代和自定义属性以及继承属性。但是,它忽略了值未定义的属性。

例如

var array = [ 'Apples', , 'Pear' ];
array.newFn = function () { };
Array.prototype.anotherFn = function() { };
array.foo = bar;
for (var prop in array)
  console.log(prop);

将省略索引1,因为它的值是undefined

它将遍历newFnanotherFnfoo

3) for..of迭代值而不是键。不同之处在于,它只迭代所有可迭代属性,忽略自定义属性和从原型链继承的属性。但是,在这样做时,包含那些属性键或属性值或两者都具有值undefined的值。同样,它只对对象的可迭代的、自己的属性包含这个。

是否存在一个循环结构来迭代

  1. 所有可迭代属性;和
  2. 的定制;和
  3. 那些从原型一直继承下来的?

遍历键?一旦我有了键,我就可以得到值了。

如果没有一个内置的循环结构,必须有一些反射属性在Object命名keys或一些这样的,让我窥探到它?

最简单的方法是使用void将索引设置为undefined。您也可以选择使用null

var array = [ 'Apples', void 0, 'Pear' ];
array.newFn = function () { };
Array.prototype.anotherFn = function() { };
array.foo = "bar";
for (var prop in array)
  console.log(prop);