인프런 커뮤니티 질문&답변

코알못님의 프로필 이미지

작성한 질문수

자바스크립트 비기너: 튼튼한 기본 만들기

8. strict 모드, [코딩 시간]

선생님 질문있습니다.

21.02.03 22:42 작성

·

226

2

[코드 2] use strict 작성

"use strict";

    try {

      book = "변수 선언하지 않음";

      console.log(book);

    } catch(error) {

      console.log(error.messege);

    }

이 부분에서 결과값으로  저는 실행 결과값으로 undefined가 나오는데 실행결과으로 변수 선언하지 않음. 이 나오는게 맞는 건가요?

제가 이해하기로는 var을 사용하지 않았기 때문에 에러가 발생하고, error에 message 의 프로퍼티가 설정되지 않았기 때문에 undefined가 발생하는 것 같은데 맞나요?

맞다면 uindefined 말고 다른 문자를 error 프로퍼티에 저장하려면 어떻게 해야하나요. 궁금합니다.

답변 6

5

Youngjae Choi님의 프로필 이미지

2021. 03. 15. 19:14

제가 대댓글 달았던것 같은데, 아니었나보군요.

"use strict";

try {

book = "변수 선언하지 않음";

console.log(book);

}catch(error) {

console.log(error.message);

}

이렇게만 적으면,

book is not defined가  뜨는게 맞다고 생각합니다.

"use strict";를 안적어주거나,
(안적어주면, book에 var를 안적어도 선언했다고 유연하게 인식해서 try문이 오류가 아니게 되어 console.log(book)이 실행 되어 "변수 선언하지 않음" 이라고 출력)

"use strict";를 적되, book에 var나 let을 적어주면,
 try문이 오류가 아니게 되므로, console.log(book)이 실행 되어 "변수 선언하지 않음" 이라고 출력.

강의나 선생님 말씀에 오해하여,

"use strict";

try {

book = "변수 선언하지 않음";

console.log(book);

}catch(error) {

console.log(error.message);

}

여기서 출력 값이 '변수 선언하지 않음' 으로 떠야한다고 얘기하는줄 알고,

그렇게 질문을 했었습니다.

영상에 실행결과 '변수 선언하지 않음' 이라고 해두셔서,
아마 이부분을 잘못 작성하셨지 않았을까 생각합니다.

그게 아니면,

error.message가 어떻게 '변수 선언하지 않음'이 되는건지 이해가 잘 가지 않네요.
앞시간에 배운것 처럼 throw 를 통해 에러메시지를 넣어준것도 아닌데, 어떻게 '변수 선언하지 않음'의 메시지가 에러메시지가 된건지 이해가 안갑니다.

단순히 'use strict' 여기 작음따옴표냐 큰따옴표냐 문제는 아닌것 같아요.
브라우저가 아닌 node로 확인을 해도
book is not defined. 라고 출력을 하거든요. 

김영보님의 프로필 이미지
김영보
지식공유자

2021. 05. 06. 00:26

book is not defined로 출력되는 것이 맞습니다.
강좌를 편집해서 반영하였습니다. 고맙습니다. 언제 기회가 되면 밥 살께요.ㅋ 

2

Youngjae Choi님의 프로필 이미지

2021. 03. 12. 19:01

'use strict';
try {
book = "변수 선언하지 않음";
console.log(book);
}catch(error) {
console.log(error.message);
}

저 또한 질문하신 분 처럼,

똑같이 했지만, 출력은

book is not defined

라고 뜨네요.

throw {

  message: "변수 선언하지 않음"

}

이라고 try문에 적었다면 원하는 결과가 나왔을 것 같은데,

저도 book is not defined 라는 글자가 뜹니다.

제가 뭘 잘못했을까요?

2

김영보님의 프로필 이미지
김영보
지식공유자

2021. 02. 04. 00:10

에라 잡아 주었으니 500원 주세요 ㅋㅋ
error.messege ==> error.message   
무엇이 다른가요...

0

하이하이님의 프로필 이미지

2021. 07. 04. 13:47

book = "문자열"은 true라서 바로 밑 콘솔에서 변수선언하지않음을 출력해준거에요

0

sellermax님의 프로필 이미지

2021. 05. 05. 23:18

흠 ㅇㅈ

0

김영보님의 프로필 이미지
김영보
지식공유자

2021. 03. 12. 19:24

"use strict";
'use strict';

book 변수를 선언할 때 var(let, const) book 처럼 작성하지 않고 book만 작성했을 때

"use strict";처럼 큰 따옴표(")를 사용하면 에러가 나지만,
'use strict';처럼 작은 따옴표(')를 사용하면 에러가 나지 않습니다. 크롬 버전 89입니다.
이전에는 관계가 없었는데 바뀐 것 같습니다.
파이어폭스는 작은 따옴표에서도  에러가 나는 것을 보면 크롬 브라우저 버그 같습니다.

Youngjae Choi님의 프로필 이미지

2021. 03. 12. 20:14

그래서 따옴표를 큰따옴표로도 바꿔봤는데, 여전히 결과는 같더라구요.

book is not defined

라고 뜹니다.

주로 자바스크립트 연습할때는 codesandbox에서 하지만,
vscode에서도 해보니 결과는 따옴표가 작은따옴표든 큰따옴표든 관계없이

book is not defined

라고 출력이 됩니다.

브라우저의 에러 일까 싶어서,
터미널을 이용해 노드로 출력을 해봐도
book is not defined

라고 출력이 됩니다.

다른 분들은 어떤지 모르겠네요.