JavaScript 中,對於普通對象,不能直接使用 length 來獲取對象的長度,因為 JavaScript 對象並不是一種有序的集合,沒有長度的概念。 對於數組或者類數組對象,可以使用 .length 來獲取它們的長度,因為它們是有序集合。 對於字元串也可以使用.length來獲取長度,因為字... ...
JavaScript 中,對於普通對象,不能直接使用 length
來獲取對象的長度,因為 JavaScript 對象並不是一種有序的集合,沒有長度的概念。
對於數組或者類數組對象,可以使用 .length
來獲取它們的長度,因為它們是有序集合。
對於字元串也可以使用.length來獲取長度,因為字元串也是有序集合。
使用 Object.keys()
方法來獲取對象的可枚舉自有屬性的鍵的數組,並使用數組的 length
屬性來獲取對象的長度。例如:
let obj = {name: 'John', age: 30, city: 'New York'};
let length = Object.keys(obj).length;
console.log(length); //3
也可以使用 for...in
來遍歷對象中的所有鍵,併在遍歷過程中計數。例如:
let obj = {name: 'John', age: 30, city: 'New York'};
let count = 0;
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
count++;
}
}
console.log(count); // 3
對於對象來說有一點需要註意,如果對象沒有定義任何自有屬性,或者對象是一個繼承來的對象,它可能會包含一些繼承來的屬性。而 hasOwnProperty 方法只會檢查自有屬性,所以在使用 for...in 時應該使用 hasOwnProperty 來確保只遍歷了對象的自有屬性。
對於 ES6 的 Object.keys(obj) 和 Object.values(obj) 是在遍歷的同時會忽略繼承的屬性,所以可以不用 hasOwnProperty。
使用 Object.getOwnPropertyNames(obj).length
,這個方法會返回一個數組,裡面是對象所有的鍵名,然後可以使用length來獲取長度。
let obj = {name: 'John', age: 30, city: 'New York'};
let length = Object.getOwnPropertyNames(obj).length;
console.log(length); // 3
使用 Object.getOwnPropertyNames 與 Object.keys 不同在於,它包括對象的不可枚舉屬性(除了 Symbol 屬性),如果想要判斷對象自身的屬性,最好使用Object.keys,如果需要包括不可枚舉屬性,那就使用Object.getOwnPropertyNames。
總結:
- 使用 Object.keys(obj).length 可以獲取對象的可枚舉自有屬性長度
- 使用 Object.getOwnPropertyNames(obj).length 可以獲取對象的所有自有屬性長度,包括不可枚舉屬性
- 使用
for...in
迴圈遍歷對象的屬性並計數的方法來獲取對象的長度,可通過該方法獲取所有屬性的長度(包括繼承來的屬性)
需要註意的是,這些方法是在 ES5 標準之後提出的,在老的瀏覽器中可能不支持。
作者:yuzhihui出處:http://www.cnblogs.com/yuzhihui/ 聲明:歡迎任何形式的轉載,但請務必註明出處!!!