Static Methods

Trong JS tồn tại một lớp đối tượng xây dựng sẵn gọi là Object. Lớp đối tượng này cung cấp nhiều hàm hữu ích để làm việc với các JS Objects.

Xét đối tượng person sau:

const person = {
  name: "Quân",
  age: 21,
  address: {
    street: "pink",
    ward: "scarlet",
    district: "rose",
    city: "crimson",
  },
}

Object.assign

Sao chép đối tượng mà không thay đổi đối tượng gốc:

// From one source object
const clonedPerson = Object.assign({}, person)
 
console.log(clonedPerson) // {name: "Quân", age: 21, address: Object}

Sao chép từ nhiều đối tượng nguồn:

// From many source object
const personExtraInfo = {
  nation: "galaxy",
  isMarried: false,
  school: "HCMUS",
}
 
const clonedPersonWithExtraInfo = Object.assign({}, person, personExtraInfo)
 
console.log(clonedPersonWithExtraInfo) // {name: "Quân", age: 21, address: Object, nation: "galaxy", isMarried: false…}

Object.keys

Lấy mọi key của thuộc tính hoặc phương thức có trong đối tượng.

console.log(Object.keys(person)) // ['name', 'age', 'address']
console.log(Object.keys(person.address)) // ['street', 'ward', 'district', 'city']

Object.values

Lấy giá trị của đối tượng và cho vào mảng.

console.log(Object.values(person)) // ["Quân", 21, Object]

Object.entries

Lấy các cặp key-value và cho vào mảng. Nói cách khác, chuyển object thành một mảng hai chiều gồm n dòng (tương ứng với n thuộc tính) và 2 cột (key và value).

console.log(Object.entries(person)) // [Array(2), Array(2), Array(2)]

Object.is

Giúp so sánh hai giá trị với nhau.

const obj = {}
console.log(Object.is(obj, {}))
// Expected output: false

Trong ví dụ trên, do object là reference data type nên dù hai object có cùng giá trị nhưng sẽ luôn khác nhau do khác tham chiếu1.

Phương thức Object.is khác toán tử == ở chỗ nó không ép kiểu dữ liệu của hai toán hạng trước khi thực hiện so sánh:

console.log(Object.is("1", 1))
// Expected output: false

Phương thức Object.is cũng khác toán tử === vì nó:

  • Không xem số 0 dương và số 0 âm là bằng nhau.
  • Xem hai đối tượng NaN là bằng nhau.
console.log(Object.is(-0, 0))
// Expected output: false
 
console.log(Object.is(NaN, NaN))
// Expected output: true

Instance Methods

Các phương thức này có sẵn ở mọi đối tượng, kể cả các user-defined object.

hasOwnProperty

Kiểm tra thuộc tính key có tồn tại trong đối tượng hay không.

console.log(person.hasOwnProperty("isMarried")) // false
console.log(person.hasOwnProperty("age")) // true

Resources

Footnotes

  1. xem thêm JS Data Types.