MDN:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperties

const dog = {name: '와우', emoji: '🐶'};

console.log(Object.keys(dog));
console.log(Object.values(dog));
console.log(Object.entries(dog));

console.log('name' in dog);
console.log(dog.hasOwnProperty('name'));
const descriptors = Object.getOwnPropertyDescriptors(dog);
console.log(descriptors); // {  name: { value: '와우', writable: true, enumerable: true, configurable: true },   emoji: { value: '🐶', writable: true, enumerable: true, configurable: true } }

const desc = Object.getOwnPropertyDescriptor(dog, 'name');
console.log(desc); // { value: '와우', writable: true, enumerable: true, configurable: true }

Object.defineProperty(dog, 'name', {
    value: '멍멍',
    writable: false, // 업데이트 가능여부
    enumerable: false, // 열거 가능여부
    configurable: false, // 삭제 수정 가능여부
});
console.log(dog.name); // 멍멍
console.log(Object.keys(dog)); // [ 'emoji' ]
delete dog.name; // 삭제도 불가능
console.log(dog.name);

const student = {};
Object.defineProperties(student, {
    firstName: {
        value: '영희',
        writable: true,
        enumerable: true,
        configurable: true,
    },
    lastName: {
        value: '김',
        writable:true,
        enumerable: true,
        configurable: true,
    },
    fullName: {
        get() {
            return `$(lastName) $(firstName)`;
        },
        set(name) {
            [this.lastName, this.firstName] = name.split(' ');
        },
        configurable: true,
    },
});
console.log(student);