프로그래머스 자릿수 더하기 자바스크립트 | Object.prototype.toString() | String, Number | map(), reduce()

Chaeyeon Lee·2023년 5월 20일
0

🔅 1. 아이디어

정수를 문자열로 바꾼 뒤, 문자열을 배열로 바꾸고 각 원소를 answer에 더해줌. 근데 지금 보니까 왜 reduce로 안 풀었지 싶네


🧑‍💻 2. 내 코드

function solution(n) {
    let str=String(n);
    let arr=[...str];
    let answer=0;
    arr.map(e=>answer+=Number(e));
    return answer;
}

🐣 3. 개념

function solution(n) {
  return n
    .toString()
    .split("")
    .reduce((acc, cur) => acc + Number(cur), 0);
}

(1) 정수n을 문자열로 타입변환한 뒤
(2) split('')으로 배열로 만들어 준다.
(3) 각 원소를 다시 정수로 변환하여 더해줌.

reduce() 개념
map() 개념
join(), split() 개념

위 코드에서 눈에 띄는 점은 두 가지이다. toString()과 reduce 내에서 Number()

📌 Object.prototype.toString()

toString()은 문자열을 반환하는 object의 대표적인 방법이다.

obj.toString()

모든 객체에는 객체가 문자열로 표시 혹은 참조 될 때 자동으로 호출되는 toString()메서드를 갖고 있다. 즉, Object를 비롯한 모든 객체에 상속됨.
toNumber는 없다는 게 당연하면서도 웃김ㅋㅋ

📌 String

String 전역객체로, 문자열의 생성자다!

String(thing)

thing은 문자열로, 변환할 아무 값을 의미한다.
나는 문제를 풀면서 (1) 방법으로 풀었고, 다른 사람은 (2) 방법으로 풀었다.

(1) let str=String(n)
(2) n.toString()

String과 toString의 차이는 다음과 같다.

var s1 = '2 + 2';               // creates a string primitive
var s2 = new String('2 + 2');   // creates a String object
console.log(eval(s1));          // returns the number 4
console.log(eval(s2));          // returns the string "2 + 2"
//-----------------------------
const stringObj = new String('foo');
console.log(stringObj);
// String { "foo" }

console.log(stringObj.toString());
//"foo"

📌 Number

숫자를 표현하고 다룰 때 사용하는 원시 래퍼 객체...
원시 값(primitive, 원시 자료형): 객체가 아니면서 메서드도 가지지 않는 데이터. 7종류이고 불변하여 변경 불가. 원시값을 변형하기 위해서는 다른 변수에 할당 한 뒤 해야함.
즉, Number(value)처럼 함수로 사용하면 문자열이나 다른 값을 Number타입으로 바꾼다고 생각하면 된다. 만약 인수를 숫자로 변환할 수 없으면 NaN을 반환한다.

//리터럴 구문
123; // 백 이십 삼
123.0; // 동일
123 === 123.0; // 참

//함수 구문
Number('123'); // 숫자 123을 반환
Number('123') === 123; // 참

Number('unicorn'); // NaN
Number(undefined); // NaN


출처
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/toString
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String

profile
프론트엔드 개발자 지망생

0개의 댓글