Object.keys()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Phương thức tĩnh Object.keys() trả về một mảng các tên thuộc tính string-keyed enumerable của chính đối tượng đã cho.

Try it

const object = {
  a: "some string",
  b: 42,
  c: false,
};

console.log(Object.keys(object));
// Expected output: Array ["a", "b", "c"]

Cú pháp

js
Object.keys(obj)

Tham số

obj

Một đối tượng.

Giá trị trả về

Một mảng các chuỗi đại diện cho các key thuộc tính string-keyed enumerable của chính đối tượng đã cho.

Mô tả

Object.keys() trả về một mảng mà các phần tử là các chuỗi tương ứng với các tên thuộc tính string-keyed enumerable được tìm thấy trực tiếp trên object. Điều này giống như việc duyệt bằng vòng lặp for...in, ngoại trừ vòng lặp for...in còn duyệt các thuộc tính trên chuỗi prototype. Thứ tự của mảng được trả về bởi Object.keys() giống với thứ tự được cung cấp bởi vòng lặp for...in.

Nếu bạn cần các giá trị thuộc tính, hãy dùng Object.values() thay thế. Nếu bạn cần cả key lẫn giá trị, hãy dùng Object.entries() thay thế.

Ví dụ

Sử dụng Object.keys()

js
// Mảng cơ bản
const arr = ["a", "b", "c"];
console.log(Object.keys(arr)); // ['0', '1', '2']

// Đối tượng giống mảng
const obj = { 0: "a", 1: "b", 2: "c" };
console.log(Object.keys(obj)); // ['0', '1', '2']

// Đối tượng giống mảng với thứ tự key ngẫu nhiên
const anObj = { 100: "a", 2: "b", 7: "c" };
console.log(Object.keys(anObj)); // ['2', '7', '100']

// getFoo là thuộc tính không enumerable
const myObj = Object.create(
  {},
  {
    getFoo: {
      value() {
        return this.foo;
      },
    },
  },
);
myObj.foo = 1;
console.log(Object.keys(myObj)); // ['foo']

Nếu bạn muốn tất cả các thuộc tính string-keyed của chính đối tượng, kể cả các thuộc tính không enumerable, xem Object.getOwnPropertyNames().

Sử dụng Object.keys() với kiểu nguyên thủy

Các đối số không phải đối tượng sẽ được ép kiểu thành đối tượng. undefinednull không thể ép kiểu thành đối tượng và sẽ ném TypeError ngay lập tức. Chỉ chuỗi có thể có thuộc tính enumerable của chính nó, trong khi tất cả các kiểu nguyên thủy khác đều trả về mảng rỗng.

js
// Chuỗi có các chỉ số là thuộc tính enumerable của chính nó
console.log(Object.keys("foo")); // ['0', '1', '2']

// Các kiểu nguyên thủy khác ngoài undefined và null không có thuộc tính riêng
console.log(Object.keys(100)); // []

Note: Trong ES5, việc truyền một giá trị không phải đối tượng vào Object.keys() sẽ ném TypeError.

Đặc tả

Specification
ECMAScript® 2027 Language Specification
# sec-object.keys

Tương thích trình duyệt

Xem thêm