用JavaScript中的`if`语句连接字符串

木川 *_* 炎星 27 javascript string concatenation string-concatenation

我正在尝试设置一个脚本来连接字符串中的一些变量(如果它们存在),以便将适当的元数据标记放入呈现的HTML文档中.

我的连接代码是:

data = "<html>\n<head>\n" + "</head>\n<body>\n\n" + paras.join("\n\n") + "\n\n</body>\n</html>";
Run Code Online (Sandbox Code Playgroud)

我正在尝试将if以下语句添加到其中(在第一个和第二个项目之间):

    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"
    }
Run Code Online (Sandbox Code Playgroud)

但我无法将这些语句中的任何一个直接添加到连接代码中(它会引发错误:) Unexpected token (.

我最好如何将这些语句添加到我的串联字符串中?

blu*_*ish 48

我使用三元运算符:

data = "<html>\n"
     + "<head>\n" 
     + ( typeof metadata_title  !== "undefined" ?  "<title>" + metadata_title + "</title>\n"                             : "" )
     + ( typeof metadata_author !== "undefined" ?  "<meta name=\"author\" content=\"" + metadata_author + "\"></meta>\n" : "" )
     + ( typeof metadata_date   !== "undefined" ?  "<meta name=\"date\" content=\"" + metadata_date + "\"></meta>\n"     : "" )
     + "</head>\n"
     + "<body>\n"
     + "\n"
     + paras.join("\n\n")
     + "\n"
     + "\n"
     + "</body>\n"
     + "</html>"
;
Run Code Online (Sandbox Code Playgroud)

  • 在特殊情况下(`var undefined ='test';`)结果是错误的.使用`typeof`是更安全的. (3认同)

sce*_*sor 5

data = "<html>\n<head>\n" 
    + (
        typeof metadata_title !== "undefined" ?
        "<title>" + metadata_title + "</title>\n" :
        ""
    )
    + (
        typeof metadata_author !== "undefined" ?
        "<meta name=\"author\" content=\"" + metadata_author + "\"></meta>\n" :
        ""
    )
    + (
        typeof metadata_date !== "undefined" ?
         "<meta name=\"date\" content=\"" + metadata_date + "\"></meta>\n" :
        ""
    )
    + "</head>\n<body>\n\n" 
    + paras.join("\n\n") 
    + "\n\n</body>\n</html>";
Run Code Online (Sandbox Code Playgroud)


Dem*_*cht 5

我可能会做一些不同的事情(更像是模板化),主要是因为我讨厌用Javascript完成的连接HTML:

var metadata_title = "Hello";
var metadata_author = "Me";
var metadata_date = "2011-09-07";

var template = "<html>\
            <head>\
                <title>#title#</title>\
                <meta name=\"author\" content=\"#author#\"></meta>\
                <meta name=\"date\" content=\"#date#\"></meta>\
            </head>\
            <body>\
            </body>\
            </html>";

var data = template.replace("#title#", metadata_title != undefined ? metadata_title : "")
                   .replace("#author#", metadata_author != undefined ? metadata_author : "")
                   .replace("#date#", metadata_date != undefined ? metadata_date : "");
Run Code Online (Sandbox Code Playgroud)

当然,有一个非常的额外开销量小,但对我来说,它的方式更具可读性.