2017-04-03 2 views
0

semble comme dans ES2015, modèle syntaxe chaîne ${ } appliquera toString() à un objet tampon

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() 

Je ne trouve pas assez d'informations sur ce sujet, peut-on expliquer cela?

+0

est-ce pas '.toString()' appliquée lorsque concaténer * tout objet * avec une chaîne? N'est-ce pas la chose logique à faire lors de la construction d'une chaîne? (Quoi d'autre voudriez-vous qu'il fasse?) – nnnnnn

+0

merci, je ne comprends pas vraiment cela sous le crochet. donc le seul problème restant est la syntaxe $ {} – stackoverYC

+1

Dans votre question éditée, la version de la chaîne du modèle enregistre une seule valeur de chaîne sur la console (où cette chaîne est le résultat de l'évaluation de la syntaxe du modèle), mais la ligne suivante enregistre deux valeurs à la console sans rien concaténer, donc je ne sais pas pourquoi vous les comparez. – nnnnnn

Répondre

1

syntaxe ${} amène à invoquer la méthode toString sur un objet js:

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

+1

merci, très intéressant! J'ai trouvé qu'en utilisant babel: 'console.log (' $ {b} ')' deviendra 'console.log ('' + b)' en es5, ce qui explique tout. – stackoverYC