JavaScript에서 ES6 템플릿 리터럴을 사용하는 방법
프로그래밍에서 용어는 “정확한” 는 값의 표기법 코드에서. 예를 들어, 문자열 값에 a 문자열 리터럴 이중 또는 작은 따옴표로 묶인 문자입니다 ("foo"
, '바'
, "이것은 문자열입니다!"
).
템플릿 리터럴 도입 된 ECMAScript 6. 문자열 리터럴과 매우 유사하게 작동합니다. 그들은 생산한다 템플릿 값 과 원시 템플릿 값, 둘 다 문자열이다..
그러나 문자열 리터럴과 달리 템플릿 리터럴은 다음과 같은 값을 생성 할 수 있습니다. 멀티 라인 문자열, 문자열 리터럴로 얻을 수있는 것 줄 바꿈 문자 추가 (\엔
) 그것에.
템플릿 리터럴도 가능합니다. 다른 값을 가진 문자열 만들기 (표현식에서 파생 된) 더하기 연산자 문자열 리터럴 ("귀하의 ID :"+ idNo
; 어디에 idNo
숫자 값을 가진 변수 표현식입니다).
이러한 모든 기능 덕분에 템플릿 리터럴이 문자열 값 만들기.
템플릿 리터럴의 구문
템플릿 리터럴의 구분 기호는 역겨운 '
캐릭터 (backquote 문자 또는 grave 악센트 기호라고도 함). 리터럴 내부의 표현식입니다. 런타임 중 평가 됨 리터럴에 의해 생성 된 최종 가치에 포함됨)은 중괄호 ~와 선행하는 달러 기호
$
.
'string $ someExpression 더 많은 문자열'
여기에 몇 가지가있다. 템플릿 리터럴의 예 생산 변하지 않은, 치환 된 (표현식이 평가 된 값으로 대체 됨), 멀티 라인 현.
console.log ( 'hello'); // hello var name = "Joan"; console.log ( 'hello $ name'); // hello Joan console.log ( 'Joan, 환영합니다.'); // Joan에게, // 환영합니다..
이스케이프 및 원시 템플릿 값
템플릿 리터럴에서 '
(백틱), \
(백 슬래시) 및 $
(달러 기호) 문자 탈출해야한다. ~을 사용하여 이스케이프 문자 \
템플릿 값에 포함될 경우.
기본적으로 템플릿 리터럴의 모든 이스케이프 시퀀스는 다음과 같습니다. 무시당한. 출력에 포함 시키려면 해당 출력을 사용해야합니다. 원시 템플릿 값.
console.log ( 'hello \ $ name.'); / console.log ( '마크 업의 인라인 코드 : \'코드 \ '); // 마크 업의 인라인 코드 :'code 'var name = "Joan" / hello $ name. console.log (String.raw'hello \ $ name. '); // hello \ $ name.
그만큼 String.raw
방법 원시 템플릿 값을 출력합니다. (템플릿 리터럴의 원시 문자열 형식). 위의 코드에서, 노골적인
방법은 “태그가있는 템플릿”.
태그가 달린 템플릿
태그가 추가 된 템플릿은 함수 호출 어디에, 보통 괄호 대신에 (선택적 매개 변수가있는) 함수 이름 외에, 템플릿 리터럴이 있습니다. 함수가 인수를 얻는 곳.
그래서 다음과 같은 함수를 호출하는 대신 :
foo (ArgumentsForFoo);
다음과 같이 호출됩니다.
foo'ATemplateStringProvidingArgumentsForFoo ';
함수 푸
라고 불린다. 태그 기능. 템플릿 리터럴로부터받은 첫 번째 인수는 정렬 그 템플릿 개체.
템플릿 객체 (배열) 모든 문자열 값 템플릿 리터럴로부터 해석되고 노골적인
보유하고있는 property (다른 배열) 모든 원시 (이스케이프되지 않은) 문자열 값 같은 문자로 해석된다..
템플릿 객체 다음에 태그 함수의 인수에는 다음이 포함됩니다. 모든 평가 된 외부 가치 그 문자 그대로 (중괄호 안에 묶인 것) $
).
아래 코드에서 푸
함수가 만들어지는 인수를 출력하다. 그런 다음 함수가 호출됩니다. 태그가있는 템플릿 방식으로, 두 개의 표현식을 담고있는 템플릿 리터럴로이름
과 신분증
).
var name = "John"; var id = 478; foo'hello $ 이름. 당신의 아이디는 $ id입니다. '; function foo () console.log (arguments [0]); // 배열 [ "hello", "당신의 아이디는 :", "." ] console.log (arguments [1]); // John console.log (arguments [2]); // 478
출력 된 첫 번째 인수는 템플릿 개체 템플릿 리터럴에서 해석 된 모든 문자열을 전달하면 두 번째 및 세 번째 인수는 평가 된 값 표현의, 이름
과 신분증
.
그만큼 노골적인
재산
앞서 언급했듯이, 템플릿 객체는 전화 속성 노골적인
포함하고있는 배열 모든 원시 (이스케이프되지 않은) 문자열 값 템플릿 리터럴로 해석됩니다. 이 방법으로 노골적인
재산:
var name1 = "John", name2 = "조안"; foo'hello \ $ name1, $ name2, 어떻게 지내세요? '; function foo () console.log (arguments [0]); // Array [ "hello $ name1,", "어떻게 지내세요?"] console.log (arguments [0] .raw); // Array [ "hello \ $ name1,", "어떻게 지내세요?"] console.log (arguments [1]); // Joan
태그가 지정된 템플릿의 사용 사례
태그가 추가 된 템플릿은 필요할 때 유용합니다. 끈을 끊다 URL에서 자주 사용되거나 언어를 구문 분석하는 경우와 같이 별도의 부품으로 분리 할 수 있습니다. 당신은 태그가 지정된 예제 템플릿은 여기에 있습니다..
IE 이외에 템플릿 리터럴은 모든 주요 브라우저에서 지원됨.
아래에서 태그 함수의 몇 가지 예를 찾을 수 있습니다. 다른 서명 인수를 나타내는
var name = "John"; foo'hello $ name, 너 둘 다 어떠니? '; bar'hello $ name, 너 둘 다 어떠니? '; function foo (... args) console.log (args); // array [ "hello", "당신은 어떻게 지내십니까?", "John"] function bar (strVals, ... exprVals) console.log (strVals); // Array [ "hello", "어떻게 지내?" ] console.log (exprVals); // 배열 [ "John"]
에서 바
함수, 첫 번째 매개 변수 (strVals
)는 템플릿 개체 두 번째 구문 (스프레드 구문 사용)은 수집 된 배열입니다. 평가 된 모든 표현식 값 함수에 전달 된 템플릿 리터럴에서.
끈 끼우기
네가 원한다면 전체 문장을 얻다. (리터럴에서 파생 된) 태그 함수 내부, 모든 값을 연결하다 템플리트 문자열과 평가 된 표현식 값을 전달하는 배열 이렇게 :
함수 foo (strs, ... exprs) // 리터럴에 포함 된식이 있으면 if (exprs.length! == 0) var n = strs.length - 1, result = "; for (var i = 0 나는 < n; i++) result += strs[i] + exprs[i]; result += strs[n]; console.log(result); //"Hello John." // if there are no expressions included in the literal else console.log(strs[0]); name = 'John'; foo'Hello $name.';
그만큼 strs
배열 보유 모든 끈 리터럴과 exprs
보유 평가 된 모든 표현식 값 리터럴로부터.
만약 하나의 표현식 값이 존재한다면 각 배열 값을 strs
(같은 것을 제외하고) 같은 인덱스 값을 갖는다. exprs
. 그런 다음 마지막에 strs
연결된 문자열에 배열, 완전한 문장을 형성하다 이 방법.