2017-04-03 7 views
0

scheint, wie in ES2015, Template String ${ } Syntax toString() zu einem Buffer-Objekt

let a = Buffer.from('hello') 

let b =() => { 
    console.log(`es6 : ${a}`) // hello 
    console.log('raw a : ', a) // <Buffer 68 65 6c 6c 6f> 
    console.log('compiled to es5 : ' + a) // hello 
    console.log(+a) // NaN 
} 

b() 

ich nicht genug Informationen zu diesem Thema finden kann, kann dies jemand gelten erklären?

+0

Ist das nicht '.toString()' angewendet wird, wenn mit einem String * jede * Objekt verketten? Ist das nicht logisch, wenn man eine Saite baut? (Was sonst willst du es tun?) – nnnnnn

+0

Danke, das verstehe ich nicht wirklich unter dem Haken. Das einzige verbleibende Problem ist $ {} Syntax – stackoverYC

+1

In der bearbeiteten Frage protokolliert die Template-String-Version einen einzelnen String-Wert in der Konsole (wobei dieser String das Ergebnis der Testsyntax ist), aber die nächste Zeile protokolliert zwei separate Werte an die Konsole, ohne etwas zu verketten, also bin ich mir nicht sicher, warum Sie sie vergleichen. – nnnnnn

Antwort

1

${} Syntax toString Verfahren auf jedem js Objekt aufzurufen verursacht:

let a = {toString:()=>("I'm a string")}; 
 
console.log(`result: ${a}`);

+1

danke, sehr interessant! Ich habe festgestellt, dass durch die Verwendung von babel: 'console.log (' $ {b} ')' zu 'console.log (' '+ b) 'in es5 wird, was alles erklärt. – stackoverYC

Verwandte Themen