프로그래밍 이야기/JavaScript 공부

[Javascript] 자바스크립트 Object.values 메서드 이해하기

BigTop 2020. 7. 27. 00:44

Object.values 메서드란?

Obejct.values() 메서드는 메서드를 호출할 때 파라미터로 전달한 객체가 가지는 프로퍼티들의 프로퍼티 값들만 묶어서 배열로 반환해주는 메서드이다.

Object.keys()와 거의 비슷하다고 볼 수 있다. 메서드 이름 따라 keys는 key들을 모아서 배열로, Object.values는 value들을 모아서 배열로 만들어 주는 메서드라고 생각하면 되겠다.

 

문법

Object.values(obj);

Object.values 메서드의 기본 문법도 keys메서드와 동일하게 그냥 이름 그대로 Object 객체에 values 메서드를 호출하고 파라미터로 프로퍼티 값을 알아내고자 하는 객체를 전달해주면 된다.

const myObject = {
    name: '싹쓰리',
    enName: 'SSAK3',
    members: ['유두래곤', '린다G', '비룡'],
    genre: 'Dance & pop',
    agency: 'MBC',
    making: '놀면뭐하니?'
}

const myValues = Object.values(myObject);

console.log(myValues);
// (6) ["싹쓰리", "SSAK3", Array(3), "Dance & pop", "MBC", "놀면뭐하니?"]

Object.values() 메서드도 역시, 객채가 가지고 있는 메서드를 사용하는 것이 아니라, Object라는 내장 객체의 메서드로 사용하고, 파라미터로 우리가 만든 객체를 집어넣어줘야 하기 때문에 myObject.values()처럼 사용하지 않도록 주의해야 한다.

const myObject = {
    name: '싹쓰리',
    enName: 'SSAK3',
    members: ['유두래곤', '린다G', '비룡'],
    genre: 'Dance & pop',
    agency: 'MBC',
    making: '놀면뭐하니?'
}

const myValues = myObject.values();

console.log(myValues);

역시 일반적으로 우리가 생성한 객체에 values라는 메서드는 존재하지 않는다.

 

배열에도...?

const myArray = ['유고스타', '유산슬', '유라섹', '유르페우스', '유DJ뽕디스파뤼', '유샘', '닭터유', '유두래곤'];

const myValues = Object.values(myArray);

console.log(myValues);
// (8) ["유고스타", "유산슬", "유라섹", "유르페우스", "유DJ뽕디스파뤼", "유샘", "닭터유", "유두래곤"]

배열도 객체이기 때문에 배열도 얼마든지 활용할 수 있다.

하지만 배열에 사용할 경우에는 어차피 같은 배열이 반환되기 때문에, 큰 의미는 없다.

const myArray = ['유고스타', '유산슬', '유라섹', '유르페우스', '유DJ뽕디스파뤼', '유샘', '닭터유', '유두래곤'];

const myValues = Object.values(myArray);

console.log(myValues);
// (8) ["유고스타", "유산슬", "유라섹", "유르페우스", "유DJ뽕디스파뤼", "유샘", "닭터유", "유두래곤"]

console.log(myArray === myValues);
// false

그런데 만약 배열을 복사하려는 목적이였다면 어느 정도 의미가 있을 수는 있겠다.

Object.values메서드에 의해 복사된 배열이 반환되기 때문에, 서로 다른 주소 값을 가지게 되고 위 코드의 마지막 줄에서 확인할 수 있듯 두 배열을 가지고 일치 비교하게되면 false 값이 나오는 걸 확인할 수 있다.