什么是JSLint批准的创建长字符串的方法?

zzz*_*Bov 9 javascript string jslint string-literals

作为前言,是的,我知道JSLint更多的是一套指导而不是规则.

在使用JSLint清理我继承的一些代码时,有很多地方会在字符串中使用某些URL.它们对于脚本来说是必需的,但是比标准的50个字符行长更长.

我一直只是路过那些特定的路线,因为它们不是问题; 但是,它让我对在JS代码中处理长字符串文字的最佳方法感到好奇.

对于标记字符串,使用字符串连接是有意义的:

'<div>' +
  '<h1>Foo</h1>' +
  '<p>Lorem ipsum</p>' +
'</div>'
Run Code Online (Sandbox Code Playgroud)

但是我不认为它对URL有意义:

'http://example.com/foo/bar/baz/fizz/buzz/lorem/ipsum/etc/...'
Run Code Online (Sandbox Code Playgroud)

编辑

对于某些哈希值(例如用于API密钥),它也没有意义:

//i.e. this made up string of me bashing on my keyboard
'0aidf9ejvr0e9vjkilkj34ioijs90eu8f9948joljse890f90jiljoi4'
Run Code Online (Sandbox Code Playgroud)

Ale*_*lov 5

你可以用类似的东西

[
    "http://example.com",
    "foo",
    "bar",
    "baz",
    ...
    "lastSegment"
].join("/");
Run Code Online (Sandbox Code Playgroud)

但这看起来不太可读.通常,某些编码指南明确地删除了URL的字符串长度限制(与Java的import语句相同- 可以是任意长的.)


Ole*_*leg 5

我认为你的问题不能只有一个正确的答案.有许多方法可以在JavaScript中编写长字符串,这主要取决于您选择的品味.我可以在这里描述一下我对这个问题的看法.

首先,您可以使用maxlenJSlint选项将默认行长度更改为您喜欢的任何值.例如

/*jslint maxlen: 130 */
Run Code Online (Sandbox Code Playgroud)

但我想你已经了解了这个设定.

我想您可以使用JavaScript代码的一些Minifiers来有效地使用JavaScripts(如Closure Compiler,Microsoft Ajax Minifier或其他).如何在页面上轻松验证代码

// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name default.js
// ==/ClosureCompiler==

// ADD YOUR CODE HERE
function hello(name) {
    var test = '<div>' +
                   '<h1>Foo</h1>' +
                   '<p>Lorem ipsum</p>' +
               '</div>';
    return test + name;
}
hello('New user');
Run Code Online (Sandbox Code Playgroud)

将被缩小到

function hello(a){return"<div><h1>Foo</h1><p>Lorem ipsum</p></div>"+a}hello("New user");
Run Code Online (Sandbox Code Playgroud)

并且所有字符串常量将被连接.因此,您可以使用长字符串常量格式化代码,这样可以更好地读取代码.缩小器将为您完成剩余的工作.

在长URL的情况下,您可以在逻辑上看起来最好的任何地方打破长字符串(我认为它总是在某些'/'字符上).在大多数实际情况中,您会有一些baseURL附加的内容.因此,您可以在文件开头或单独的JavaScript文件中的某处定义公共项目设置

var baseLoremUrl = 'http://example.com/foo/bar/baz/fizz/buzz/lorem/';
Run Code Online (Sandbox Code Playgroud)

并在以后使用它

'<a href="' + baseLoremUrl + 'ipsum/etc/' + '">Click me!</a>'
Run Code Online (Sandbox Code Playgroud)

如果你有参数应该附加到URL之类的

'http://example.com/foo/bar/baz/fizz/buzz/lorem?x=123&y=ABC'
Run Code Online (Sandbox Code Playgroud)

我一直用

baseLoremUrl + '?' + $.params({x: 123, y: 'ABC'})
Run Code Online (Sandbox Code Playgroud)

从一方开始使代码更具可读性,并确保在需要时对encodeURIComponent正确编码所有参数.

以上都是我在编写JavaScript代码时尝试遵循的规则.