第四纪冰川 發表於 2023-1-12 11:16:00

JavaScript 获取对象的长度

<h1 id="javascript-获取对象的长度">JavaScript 获取对象的长度</h1>
<p>在 JavaScript 中,要获取对象的长度(即对象中属性的数量),可以使用以下几种方法:</p>
<ol>
<li><strong>使用 <code>Object.keys()</code></strong>:该方法返回一个对象自身(即不包括继承属性)可枚举属性的数组。</li>
<li><strong>使用 <code>Object.getOwnPropertyNames()</code></strong>:该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性,但不包括 Symbol 属性)。</li>
<li><strong>使用 <code>Reflect.ownKeys()</code></strong>:该方法返回一个对象自身(即不包括继承属性)所有属性的数组(包括不可枚举属性和 Symbol 属性)。</li>
<li><strong>使用 <code>for...in</code></strong>: 该方法依次访问一个对象及其原型链中所有可枚举的属性。</li>
</ol>
<p>以下是每种方法的示例代码:</p>
<h3 id="使用-objectkeys">使用 <code>Object.keys()</code></h3>
<pre><code class="language-javascript">const x = {
f: 6,
};

const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;

Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});

const symbolKey = Symbol("e");
obj = 5;

const length = Object.keys(obj).length;
console.log(length); // 输出 3
</code></pre>
<p><strong>说明</strong>:</p>
<ul>
<li><code>Object.keys()</code> 只计算对象自身(即不包括继承属性)的可枚举属性。</li>
<li>添加了一个继承属性 <code>f</code>、一个不可枚举属性 <code>d</code> 和一个 Symbol 属性 <code>symbolKey</code>。</li>
<li>输出对象 <code>obj</code> 的长度为 3。</li>
</ul>
<h3 id="使用-objectgetownpropertynames">使用 <code>Object.getOwnPropertyNames()</code></h3>
<pre><code class="language-javascript">const x = {
f: 6,
};

const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;

Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});

const symbolKey = Symbol("e");
obj = 5;

const length = Object.getOwnPropertyNames(obj).length;
console.log(length); // 输出 4
</code></pre>
<p><strong>说明</strong>:</p>
<ul>
<li><code>Object.getOwnPropertyNames()</code> 计算对象自身(即不包括继承属性)的所有属性,包括不可枚举属性(除了 Symbol 属性)。</li>
<li>添加了一个继承属性 <code>f</code>、一个不可枚举属性 <code>d</code> 和一个 Symbol 属性 <code>symbolKey</code>。</li>
<li>输出对象 <code>obj</code> 的长度为 4。</li>
</ul>
<h3 id="使用-reflectownkeys">使用 <code>Reflect.ownKeys()</code></h3>
<pre><code class="language-javascript">const x = {
f: 6,
};

const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;

Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});

const symbolKey = Symbol("e");
obj = 5;

const length = Reflect.ownKeys(obj).length;
console.log(length); // 输出 5
</code></pre>
<p><strong>说明</strong>:</p>
<ul>
<li><code>Reflect.ownKeys()</code> 计算对象自身的(即不包括继承属性)所有属性,包括不可枚举属性和 Symbol 属性。</li>
<li>添加了一个继承属性 <code>f</code>、一个不可枚举属性 <code>d</code> 和一个 Symbol 属性 <code>symbolKey</code>。</li>
<li>输出对象 <code>obj</code> 的长度为 5。</li>
</ul>
<h3 id="使用-forin-语句">使用 <code>for...in</code> 语句</h3>
<pre><code class="language-javascript">const x = {
f: 6,
};

const obj = Object.create(x);
obj.a = 1;
obj.b = 2;
obj.c = 3;

Object.defineProperty(obj, "d", {
value: 4,
enumerable: false,
});

const symbolKey = Symbol("e");
obj = 5;

let count = 0,
count_all = 0;
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
    count++;
}
count_all++;
}
console.log(count); // 3
console.log(count_all); // 4
</code></pre>
<p><strong>说明</strong>:</p>
<ul>
<li>使用 <code>for...in</code> 循环遍历对象的属性并计数的方法来获取对象的长度,可计算自有属性和继承属性,但不包括不可枚举属性和 Symbol 属性。</li>
<li>添加了一个继承属性 <code>f</code>、一个不可枚举属性 <code>d</code> 和一个 Symbol 属性 <code>symbolKey</code>。</li>
</ul>
<p>通过上述方法,可以根据不同需求,选择合适的方法来获取对象的长度。</p><br><br>
来源:https://www.cnblogs.com/yuzhihui/p/17045945.html
頁: [1]
查看完整版本: JavaScript 获取对象的长度