Dlaczego następujący wiersz powoduje błąd czasu wykonywania w pliku Node.js?Zagnieżdżony błąd ciągu szablonów w NodeJS
var a = ````;
rzuca:
TypeError: "" is not a function
Testowane z wersjami node.js 4.x, 6.x, 8.x oraz 9.x
Dlaczego następujący wiersz powoduje błąd czasu wykonywania w pliku Node.js?Zagnieżdżony błąd ciągu szablonów w NodeJS
var a = ````;
rzuca:
TypeError: "" is not a function
Testowane z wersjami node.js 4.x, 6.x, 8.x oraz 9.x
Pierwsze dwa backticks jest pusty łańcuch podczas gdy następne dwa będą działać jako tagged template literals, które wywołają funkcję przed nią. Ponieważ ""
(pusty ciąg) nie jest funkcją do sprawdzenia, powoduje błąd.
Aby backticks gniazdo w szablonie dosłownym, uciec, poprzedzając je ukośnikiem
console.log(`\`\``);
To dlatego, że masz dwa literały szablonów bezpośrednio obok siebie bez jakiegokolwiek łączenia wyraz. Analizator składni rozpoznaje to jako oznakowane wywołanie funkcji, takie jak String.raw`stuff here`
. Oceniany jest pierwszy kod ``
, który daje ""
, a następnie silnik JavaScript próbuje wywołać ten pusty ciąg jako funkcję, przekazując przetworzony tekst literału. Ponieważ pusty ciąg nie jest funkcją, pojawia się błąd.
Otrzymujesz ten sam błąd bardziej bezpośrednio przy użyciu ""``
. :-)