Durante il test delle nuove stringhe di modelli di JavaScript ES6 (in Firefox, se è importante), ho notato alcune incongruenze nei loro tipi.Tipo incoerente per stringhe di modelli ES6 JavaScript
ho definito una funzione personalizzata, in questo modo:
function f(a) {
console.log(typeof(a));
console.log(a);
}
In primo luogo, ho provato la funzione "normalmente", usando le parentesi intorno alla stringa di modello.
f(`Hello, World!`)
Come previsto, questo ha prodotto un tipo di string
e Hello, World!
è stato emesso alla console.
Quindi ho chiamato la funzione stenografia, senza le parentesi e si sono verificate incoerenze.
f`Hello, World!`
Il tipo è diventato object
, e Array [ "Hello, World!" ]
è stato emesso alla console.
Perché la stringa modello è stata avvolta in un array quando si utilizza il secondo metodo? Questo è solo un bug in Firefox (ES6 è un nuovo standard, dopotutto) o è previsto questo comportamento per qualche motivo?
Provate 'console.log \' a $ {1} b $ {2} c \ ';' per capire meglio cosa sta succedendo. Omettendo la parentesi, hai completamente cambiato il significato della tua affermazione: non stai semplicemente chiamando la funzione più, ma stai usando un * modello con tag *. Sì, questa sintassi fa schifo. – Blackhole