사전지식

  • JavaScript에서 텍스트 데이터는 문자열(String)로 저장됩니다.
  • 문자열은 작은 따옴표(' '), 큰 따옴표(" "), 백틱(` `)으로 묶을 수 있습니다. - mac 에서 백틱은 [Opt + 원화] 입니다.
  • 특수문자를 사용할 때는 escape문자( \ )를 사용합니다.

Strings


 

 ▽ 6.1 따옴표는 쌍따옴표를 사용한다. 이스케이프한 경우는 예외로 홑따옴표를 사용할 수 있다.

// bad
var key = 'naver';
var obj = {
  'key': '1'
}

// good
var key = "naver";
var obj = {
  "key": "1"
}

 

 

 ▽ 6.2 문자열은 100자를 넘지 않는다. 100자가 넘는 긴 물자열인 경우 줄바꿈시 escape 문자()를 사용하지 않는다. escape문자 대신 +연산자를 이용한다. ES6의 template strings가 사용 가능한 환경에서는 6.3룰을 적용한다.

// bad
const errorMessage = 'This is a super long error that was thrown because \
of Batman. When you stop to think about how Batman had anything to do \
with this, you would get nowhere \
fast.';

// good
const errorMessage = "This is a super long error that was thrown because " +
  "of Batman. When you stop to think about how Batman had anything to do " +
  "with this, you would get nowhere fast.";

 

 

 ▽ 6.3 프로그램에서 문자열을 생성하는 경우는 문자열 연결이 아닌 template strings를 이용한다.

// bad
function sayHi(name) {
  return "How are you, " + name + "?";
}

// bad
function sayHi(name) {
  return ["How are you, ", name, "?"].join();
}

// good
function sayHi(name) {
  return `How are you, ${name}?`;
}

: ES6에서는 템플릿 리터럴이라는 새로운 문자열 표기법을 도입했습니다.

  • 따옴표와 다르게 백틱( ` )을 이용합니다. -> 연산자 없이 간단히 문자열을 삽입할 수 있습니다.
  • escape를 사용하지 않아도 됩니다. ex. \n
  • 문자열 내부에 포함식을 사용할 수 있습니다. 위 예제와 같이.
  • 멀티라인도 가능합니다.

 

 

 ▽ 6.4 절대로 eval()을 사용하지 않는다.

: eval()이라는 JavaScript의 내장함수는 사용을 절대 금하고 있습니다. 이유가 뭘까요?

  • eval()은 JS파일로부터 인자로 받은 코드 중 문자열이 있으면 이를 수치화 합니다.(문자열->숫자)
  • 이 때, 인자로 받은 코드를 caller의 권한으로 수치화합니다. 관리자 권한으로 실행과 같은 느낌이죠.
  • 위의 이유로 바이러스에 취약하고, 제 3자가 eval()이 호출된 위치의 스코프 추적이 가능합니다.
  • JS 파싱단계에서 JS파일의 문자열을 발견하면 수행합니다.
  • 위 단계에서 인터프리터를 사용하여 다른 대안보다 느리고 비효율적으로 동작합니다.

결국 eval()이 취약하다는 점에서 사용을 금하고 있는 것 같습니다. (아마도!)

 

 

 ▽ 6.5 문자열에 불필요한 escape 문자를 사용하지 않는다.

// bad
const foo = "\'this\' \i\s \'quoted\'";

// good
const foo = "\"this\" is 'quoted'";
const foo = `my name is '${name}'`;

 

 문자열 또한 그렇게 많이 언급할 부분은 없는 것 같습니다. 그래도 eval()을 사용하지 않아야겠다! 정도 얻은 것 같습니다.

추후 escape나 백틱, string 내장함수들에 대해서도 정리하는 시간을 가져야겠습니다.

 

 

naver github STYLE_GUIDE.md

 

+ Recent posts