La concaténation de chaînes de caractères avec des "si", énoncés dans le code JavaScript
Je suis tente de mettre en place un script pour concaténer des variables à l'intérieur d'une chaîne de si elles existent, dans l'ordre à la place des balises de métadonnées dans un rendu HTML du document.
Mon concaténation du code est:
data = "<html>\n<head>\n" + "</head>\n<body>\n\n" + paras.join("\n\n") + "\n\n</body>\n</html>";
Je suis en train d'ajouter if
énoncés comme suit dans (entre le premier et le deuxième éléments):
if (typeof metadata_title !== "undefined") {
"<title>" + metadata_title + "</title>\n"
}
if (typeof metadata_author !== "undefined") {
"<meta name=\"author\" content=\"" + metadata_author + "\"></meta>\n"
}
if (typeof metadata_date !== "undefined") {
"<meta name=\"date\" content=\"" + metadata_date + "\"></meta>\n"
}
Mais je ne peux pas ajouter l'un de ces instructions directement dans la concaténation du code (il renvoie une erreur: Unexpected token (
).
La meilleure façon pourrais-je aller sur l'ajout des déclarations comme celles-ci dans ma concaténation de chaîne de caractères?
Vous devez vous connecter pour publier un commentaire.
J'avais utiliser un opérateur ternaire:
typeof
dans ce cas. Pourquoi ne pas juste vérifier pour voir si oui ou non levar
estundefined
?..var undefined = 'test';
), le résultat est mauvais. À l'aide detypeof
est en veille.ReferenceError
. Je pense que c'est ce que l'OP avait à l'esprit. Le vôtre est parfaitement bien si tous les trois méta-données sont définies, bien sûr.Je pourrais faire quelque chose d'un peu différent (un peu plus proche de templating), principalement parce que je déteste concaténées HTML fait avec Javascript:
Sûr, il y a un très petite quantité de la charge supplémentaire, mais pour moi, c'est façon plus lisible.
#paras#
entre lesbody
balises et de le remplacer de la même manière que les autres éléments sont remplacés..join
retourne une chaîne de caractères, donc je suppose que cela pourrait fonctionner.Construire l'ensemble du document dans un tableau, puis joignez-vous à une
"\n"
à la fin. (La raison pour cela est bien sûr de ne pas avoir beaucoup de nouvelles lignes dispersés sur! Et si vous êtes sur IE7 ou moins,Array#join
est considérablement plus rapide que répété de concaténation de chaîne.)Code ici: http://jsfiddle.net/ZCbCZ/
Mise à JOUR j'ai oublié d'inclure les "paras", dans le premier violon. Le code avec les paras est ici: http://jsfiddle.net/U8325/1/
Pour ceux qui ne souhaitent pas cliquez sur à travers et de l'essayer, voici le script:
J'ai aimé la lisibilité de Demian Brecht réponse, mais je tiens seulement à changer de chaîne pour une regex au lieu de cela, parce que la fonction de remplacement() remplace seulement le premier match (voir plus ici: Le JavaScript .remplacez-la uniquement remplace premier Match)