2014-11-04 3 views
0

CoffeeScript에서 다음 문은 빈 문자열로 시작되는 JavaScript 문으로 평가됩니다.CoffeeScript의 문자열 보간이 빈 문자열로 표현식 접두사를 사용하는 이유는 무엇입니까?

안전성과 관련하여 엣지 케이스가있는 것처럼 느껴지지만 머리 꼭대기에서 생각할 수 없습니다. 어떤 경우 접두사가 차이를 만드나요?

커피 스크립트 :

x = "#{foo} bar" 

자바 스크립트 :

그것은 표현은 항상 예를 ​​들면 방지 문자열로 평가되는 것을 보장
x = "" + foo + " bar"; 
+2

나는 100 % 확실하지 오전하지만 코드의이 비트는 내가 노력 주목할 필요가 :'{A : 'Y'} + "일"'=> NaN이 있지만 ' "" + {a : 'y'} + "thing"'=> "[object Object] thing"입니다. 그래서 내 생각 엔 빈 문자열에 객체를 연결하면 연결 전에 객체에서'toString'을 호출합니다. – Brennan

+3

['+'연산자의 정의]의 7 번과 8 번 단계를 고려합니다. (http://ecma-international.org/ecma- 262/5.1/# sec-11.6.1) 연결 (7)과 추가 (8)를 보장합니다. 고안된 예제는''# {3} # {4} ''입니다. 표현식 (' ""+ 3 + 4')의 시작 부분에 빈 문자열이 있으면 결과는''34 "'이됩니다. 그것이 없으면 ('3 + 4') 결과는'7'입니다. –

+2

@ 브레넌 : 아니요 당신은 블록 구문 인'{a : 'y';}'에 먹이감을 느꼈습니다. [http : //stackoverflow.com/q/14115902/1048572 참조] /stackoverflow.com/q/17268468/1048572)). '({a : 'y'}) + 'thing''시도하십시오 – Bergi

답변

1

연결 대신 숫자로 된 값. 문자열에 하나의 보간 된 표현식 만 포함 된 경우에는 해당 표현식을 효과적으로 문자열로 변환합니다. 예를 몇 :

x = 2 
y = 3 

typeof "#{x}" is string # true since this compiles to "" + x 

str2 = "#{x}#{y}" # We want the string "23" here, not the number 5