Experiment

앵버박사 2013. 11. 4. 21:09

개인 프로젝트 도중, 여러줄로 문자열을 선언할 일이 생겼는데 잘 안되더라구요;;

제가 원하는 형태는..


Wedump.sketch("

#div3

(10px)

#div1 (10px) #div2

");


이런 타입이었습니다. 문자열을 받아 해당 모양대로 문자열을 파싱해서 HTML을 다시 렌더링 해주는 모듈을 만들려고 했습니다.

그러던 중 발생한 문제!!! 두둥~!


SyntaxError: Unexpected token ILLEGAL


해서! 어떻게 해결했는가 하면


Wedump.sketch("                  \n\

#div3                        \n\

(10px)                       \n\

#div1 (10px) #div2      \n\

");


정답은 \n\ 였습니다...만

별로 맘에 들지 않습니다. 하지만 언어레벨에서의 SyntaxError이기 때문에 방법이 없는 것 같습니다.

혹시 다른 좋은 해결책이 있으신 분은 댓글로 알려주시면 감사 하겠습니다. _(_ _)_


\n\ 를 써야하는 이유는 제 나름대로 생각해본 결과..(ECMAScript 스펙을 아직 확인하기 전이라 확신을 못드리겠네요..;;)

자바스크립트는 스크립트 언어인지라 한줄 씩 읽어 들이기 때문에, 한줄에 문장을 완성하는 것이 기본인 것 같습니다.


1)

var foo = "a; // SyntaxError: Unexpected token ILLEGAL : 위에서 \n\ 을 쓰기전과 동일한 결과


2)

// SyntaxError: Unexpected token ILLEGAL

// 2는 사실 첫번째 줄에서 이미 1과같은 SyntaxError가 남(두번째줄은 실행되지 않음)

var foo = "a

";


3)

var bar = "a"

"b"; // "b" : 마지막 줄의 내용이 최종값이 됨


하지만 여러줄로 쓸 수 있는 방법이 필요했겠지요.

\n 는 자바스크립트 파서가 <br> 태그로 바꾸어 주지만,

자바스크립트 파서가 \n\ 를 만나게 되면 문자열에 \n 를 삽입하고, 다음 행까지 문자열로 취급하여 해석하는 것이 아닐까 추측해봅니다.

따라서 \n\ 는 (위에서 설명한) 특별한 용도로 만들어진 것이라고 생각됩니다.

참고로 줄바꿈 없이 "\n\" 이렇게 쓰면 SyntaxError가 발생합니다. 그리고 \n\ 대신 \t\ 를 쓰면 "    " 과 같은 결과가 나옵니다.(탭 효과)


방금 전 설명은 전적으로 제 생각입니다. 혹시 정확히 아는분이 계시면 댓글로 정정 부탁드려요. ㅎ_ㅎ;;