跳至正文
首页 » 博客 » How to print or enumerate properties of a JavaScript object?

How to print or enumerate properties of a JavaScript object?

我通常会遇到以下要求,

  • 如何打印对象的所有属性的名称?
  • 如何只打印对象的方法?
  • 如何打印对象的甚至不可枚举的属性?

在这篇文章中,我们将探索迭代和打印JavaScript对象属性的所有选项。让我们考虑对象cat,如下面的清单所示:

var cat = {
名称:foo”,年龄: 12,canRun: function (){“可以运行” (console.log);}}

默认情况下,对于对象的所有属性,enumerable设置为true。所以现在,如果我们使用Object.getOwnPropertyDescriptor打印cat的canRun和name属性的描述,我们将发现这两个属性的可枚举值为true。

console.log( Object .getOwnPropertyDescriptor(cat, "canRun" ));console.log( Object .getOwnPropertyDescriptor(cat, 'name' ));

正如你所注意到的,除了可枚举,可配置和可写也设置为true。

让我们从打印所有可枚举为true的属性开始。

打印所有可枚举属性使用for .. in循环

我们可以使用循环中的JavaScript打印cat对象拥有或继承所有可枚举属性。

(cat中的var prop) {console.log(prop);}

使用for .. in循环,可以迭代所有可枚举的属性。上面的for循环将打印cat对象的所有可枚举属性。

JavaScript for .. in循环不会迭代不可枚举的属性或可枚举设置为false的属性。为了更好地理解它,让我们继续使用object.Definepproperty函数将cat的name属性的enumerable设置为false。

对象。defineProperty(cat, 'name', {enumerable: false });
    对于 (cat中的var prop) {console.log(prop);}

在上面的清单中,我们将enumerable of name属性设置为false,然后使用JavaScript for循环迭代到这些属性。在输出中,您会注意到JavaScript省略了name属性,并将输出如下图所示

JavaScript for .. in循环迭代对象的所有可枚举属性,无论它是自己的属性还是继承的属性。让我们看一个关于for .. in循环如何也返回继承的可枚举属性的示例。我创造了一个叫做动物的物体,

var动物 = {
【蓝色】颜色:}

我们使用 __proto __ 链接动物对象作为猫对象的父对象。因此,我们在cat对象和animal对象之间创建继承,如下所示:

cat.__Proto __ = 动物;

现在,cat对象有三个可枚举的属性。它有自己的年龄和canRun属性,并继承了color属性。所以for .. in循环将打印cat对象的age、canRun和color属性。

(cat中的var prop) {console.log(prop);}

上面for .. in循环将打印我们的颜色属性,除了年龄和canRun属性。

下面,找到上面讨论中使用的整个代码,

var动物 = {
【蓝色】颜色:}
    var cat = {
名称:foo”,年龄: 12,canRun: function () {“可以运行” (console.log);}}


cat.__Proto __ = 动物;
    对象。defineProperty(cat, 'name', { enumerable: false });
    对于 (cat中的var prop) {console.log(prop);}

因此,我们可以总结为 .. in循环中的以下几点,

  • 它返回对象的所有自己的可枚举属性
  • 它返回对象的所有继承的可枚举属性
  • 它不返回不可枚举的属性

打印所有自己的可枚举属性使用Object.keys

在ECMA 5中,引入了Object.keys(),它返回一个包含JavaScript对象的所有可枚举属性的数组。它只返回对象自己的属性; 它不返回继承的属性。

我们可以使用objecty.keys打印cat对象的所有可枚举属性,如下面的清单所示。

var cat = {
名称:foo”,年龄: 12,canRun: function () {“可以运行” (console.log);}}
console.log( Object .keys(cat));

打印所有方法的对象

我们可能有其他要求,只是打印一个对象的所有自己的方法。为此,让我们创建一个函数,它将返回对象的所有自己的方法。

函数getallmethases (object) {
        返回对象。getOwnPropertyNames(object).filter( function (p) {            返回typeof object[p] = '函数' ';});}

Getallmethands () 函数将返回传递对象的所有方法。假设我们有一个对象猫,如下所示,

var cat = {
名称:foo”,年龄: 12,canRun: function () {“可以运行” (console.log);}}

要打印cat对象的方法,我们将其传递给getallmethands () 函数,函数将返回canRun方法。

console.log(getAllMethods(cat));

在输出中,我们可以看到canRun打印。

结论

在这篇文章中,我们了解了打印或枚举对象自己或继承的属性和方法的各种方法。我希望你觉得这篇文章有用。谢谢你的阅读。</p