36

它实际上并不需要添加换行符,只是一些可读的东西。

还有什么比这更好的吗?

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

9 回答 9

22

几乎与尼克菲茨的回答相同:

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

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

于 2010-03-11T13:19:28.107 回答
16

我喜欢这个版本(仅在代码格式方面与您的不同):

var str = "line 1"
        + "line 2"
        + "line 3";
于 2009-10-19T15:20:25.347 回答
13

你可以做

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

正如评论中提到的,javascript 解析器可以很好地处理这个问题(它适用于所有主要浏览器),但不是 ECMA 脚本语法的正式一部分。因此,它可能会也可能不会与压缩器、错误检查器一起使用,并且不能保证在浏览器中也能正常使用。

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

于 2009-10-19T15:09:53.920 回答
12

供参考。您建议的方式是正确的方式,并且比其他答案更好。JsLint仅验证您的版本。

于 2009-10-19T15:14:41.127 回答
10
var str = [
    "line 1",
    "line 2",
    "line 3"
].join("");
// str will contain "line1line2line3"

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

于 2009-10-19T17:12:11.533 回答
6

始终如一。

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

于 2009-10-19T15:19:56.420 回答
2

是的!您可以使用 \ 字符让 JavaScript 忽略行尾字符

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

但是,正如Elzo Valugi 所指出的,这不会使用 JSLint 进行验证。

于 2009-10-19T15:11:44.253 回答
2

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

var str = <><![CDATA[

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

]]></>.toString();
于 2009-10-19T18:09:44.330 回答
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 着色器。在开发过程中,使用起来会更好,以后您总是可以使用简单的正则表达式来运行它,该正则表达式将该语法转换为跨浏览器版本。

于 2011-07-05T11:05:28.770 回答