这个问题在这里已经有答案了:

它实际上不必添加换行符,只需添加可读的内容即可。

还有比这更好的吗?

str = "line 1" +
      "line 2" +
      "line 3";
有帮助吗?

解决方案

与 NickFitz 的答案几乎相同:

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

不同之处在于,代码的可维护性稍高一些,因为可以对行进行重新排序,而无需考虑逗号在哪里。没有语法错误。

其他提示

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

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

你可以做

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

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

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

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

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

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

始终如一。

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

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

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

然而,作为 埃尔佐·瓦鲁吉 (Elzo Valugi) 指出, ,这不会使用 JSLint 进行验证。

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

var str = <><![CDATA[

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

]]></>.toString();

以下是在使用 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);
}
*/});

这不适用于 火狐浏览器, ,尽管它可以在 Chrome 中运行。

示例用途是编写/测试 webgl 着色器。在开发过程中,与之合作的情况要好得多,稍后您总是可以使用简单的Regexp来浏览该语法,将语法转换为跨浏览器版本。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top