개발자
React를 급하게 독학하고 있는데 JS 문법에서 막혀서 여쭤봅니다. 강의들 찾아보면 {}를 사용해서 변수처럼 쓸 수 있는데 (ex. <div>{contents}</div>) 이걸 JS 표현식이라고 해서 JS 문법이라고 들었습니다. 일반적으로 객체를 변수에 할당시키면 리터럴이 아니라 주소가 담기잖아요. 왜 a를 찍는데 객체 리터럴이 보이고, {a}를 하면 객체 value로 객체가 들어가는 것처럼 표현되나요? 이 개념 찾아보고 싶은데, 뭐라고 검색해야 되는지 막막합니다... -------------------------------- let a = {a:"asfd", b:"erw"}; let b = "ast"; console.log(a); // 출력1: { a: 'asfd', b: 'erw' } console.log(b); // 출력2: ast console.log({a}); // 출력3: { a: { a: 'asfd', b: 'erw' } } console.log({b}); // 출력4: { b: 'ast' } 위 코드는 myCompiler에서 실행해봤습니다. https://www.mycompiler.io/ko/new/nodejs
답변 1
인기 답변
JavaScript의 `{}`와 JavaScript 확장 문법인 JSX의 `{}`를 혼동하고 계신 것 같습니다. JS의 `{}`는 말 그대로 객체를 의미하지만, JSX의 `{}`는 자바스크립트 코드를 실행하고 그 결과를 HTML로 표현하고자 할 때 사용하는 구문입니다. (참고: https://react.dev/learn/javascript-in-jsx-with-curly-braces) JSX는 마크업 작성의 편의를 위해 만들어진 문법이기 때문에, 실제로 브라우저에서 JSX 문법을 실행하면 당연히 다른 결과가 나타납니다. 적어주신 `console.log({ a })` 코드는 `console.log({ "a": a })`를 축약한 형태입니다. 이 문법은 ES6에서 도입된 Object shorthand property 문법으로, 객체 리터럴의 key랑 value가 같을 때 가독성을 좋게 만들어주는 역할을 합니다. ES6 이전엔 key와 value가 같더라도 두 번 타이핑을 해줘야 했습니다. (코드 참조) ES6 부터는 축약된 형태로 객체 리터럴을 작성할 수 있습니다. 이 문법 구조가 JSX의 Curly braces와 비슷해서 헷갈리신 것 같습니다.
1// ES6 이전
2const name = 'Smith'
3const age = 20
4
5const person = {
6 "name": name,
7 "age": age,
8}
9
10// ES6 이후
11const name = 'Smith'
12const age = 20
13
14const person = {
15 name,
16 age,
17}
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2024년 04월 22일
JS에서 {}는 객체 리터럴이라고 하며, 객체를 선언하는 문법입니다. 위 코드에서 console.log({a}); 는 {a} 부분이 새로운 객체를 생성하며, 이 객체의 속성 이름은 'a' 그리고 그 값은 변수 a의 값인 {a:"asfd", b:"erw"}가 됩니다. 따라서 출력결과가 { a: { a: 'asfd', b: 'erw' } } 가 되는 것입니다. console.log({b}); 에서의 {b} 도 마찬가지로 새로운 객체를 생성하며, 이때 속성 이름이 'b'이고 값은 변수 b의 값인 "ast" 입니다. 따라서 결과는 { b: 'ast' } 가 나옵니다. React에서 <div>{contents}</div> 처럼 사용하는 {}는 JavaScript 표현식을 JSX 안에 삽입하기 위한 문법인데요, 이 경우와 위의 경우는 slightly 다르게 동작합니다. React JSX에서 {} 안에 들어갈 수 있는 것은 JavaScript 표현식이며, 이곳에 넣어진 표현식은 렌더링 과정중에 평가되어 해당포인트에 그 결과값이 담기게 됩니다. 검색하실때는 "JavaScript object literal", "JavaScript destructuring" 혹은 "Embedding Expressions in JSX" 와 같은 주제로 찾아보시면 도움이 될 것입니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!