在JavaScript中编写多行字符串最简洁的方法是什么?

时间:2009-10-19 15:07:40

标签: javascript string readability maintainability

它实际上不必添加换行符,只是可读的东西。

还有什么比这更好的吗?

str = "line 1" +
      "line 2" +
      "line 3";

9 个答案:

答案 0 :(得分:20)

几乎与NickFitz的答案相同:

var str = [""
    ,"line 1"
    ,"line 2"
    ,"line 3"
].join("");
// str will contain "line1line2line3"

不同之处在于,代码更易于维护,因为可以重新排序行而不考虑逗号的位置。没有语法错误。

答案 1 :(得分:16)

我喜欢这个版本(与您的代码格式化不同):

var str = "line 1"
        + "line 2"
        + "line 3";

答案 2 :(得分:13)

你可以做到

str = "\
line 1\
line 2\
line 3";

正如评论中所提到的,javascript解析器处理这个问题(它适用于所有主流浏览器),但不是ECMA Script语法的正式部分。因此,它可能适用于压缩器,也可能不适用于错误检查器,并且不能保证在浏览器中工作。

这可能更具可读性,但不是“最佳”方式。也许ECMA脚本有一天会支持c#的@“”。

答案 3 :(得分:12)

FYI。 你建议它的方式是正确的方式,比其他答案更好。 JsLint仅验证您的版本。

答案 4 :(得分:10)

var str = [
    "line 1",
    "line 2",
    "line 3"
].join("");
// str will contain "line1line2line3"

如果您确实需要字符串中的换行符,请将.join("")替换为.join("\n") /

答案 5 :(得分:6)

始终如一。

无论您选择哪种方式,都要在整个应用程序中以完全相同的方式完成。如果您正在处理已编写代码的应用程序,请接受它们设置的约定并继续使用它。

答案 6 :(得分:2)

是的!你可以use the \ character to have JavaScript ignore end of line characters

str = 'line 1 \
line 2 \
line 3';

但是,作为pointed out by Elzo Valugi,这不会使用JSLint进行验证。

答案 7 :(得分:2)

这只适用于E4X支持的浏览器 - 我希望我们可以在IE中使用它

var str = <><![CDATA[

   Look, a multi-line
   string! < " // ' ? &

]]></>.toString();

答案 8 :(得分:1)

这是使用Chrome时在开发过程中可能有用的一个。

function FSTR(f) {
    // remove up to comment start and trailing spaces and one newline
    s = f.toString().replace(/^.*\/\* *\r?\n/,"");
    // remove the trailing */} with preceeding spaces and newline
    s = s.replace(/\n *\*\/\s*\}\s*$/,"")
    return s;
}

s = FSTR(function(){/*
uniform vec2 resolution;
uniform float time;

void main(void)
{
    vec2 p = -1.0 + 2.0 * gl_FragCoord.xy / resolution.xy;
    vec2 cc = vec2( cos(.25*time), sin(.25*time*1.423) );
    ...
    float color = sqrt(sqrt(dmin))*0.7;
    gl_FragColor = vec4(color,color,color,1.0);
}
*/});

这不适用于 Firefox ,但它适用于Chrome。

用于编写/测试webgl着色器的示例。 在开发过程中,这可以更好地使用和 以后你可以用一个简单的正则表达式来运行它 将该语法转换为跨浏览器版本。