3

我的一位同事在 JS 对象中设置属性的字符串值时使用了反斜杠:

shareButtonsHtml : '\
    <span class="share-fb">\
        <a href="#" class="fb-share"><span class="fb-share-icon"></span>Share</a>\
        <span class="fb-share-count"><i></i><u></u>0</span>\
    </span>\
    <div class="share-twitter"> \
        <iframe class="share-twitter-iframe" \
                allowtransparency="true" frameborder="0" scrolling="no" \
                src="https://platform.twitter.com/widgets/tweet_button.html" \
                style="width:130px; height:20px;"></iframe> \
    </div> \
    <div class="share-google"> \
        <div class="g-plusone" data-size="small" data-annotation="none"></div> \
    </div>',

我们对这个字符串做的唯一事情就是当用户将鼠标悬停在我们的社交分享按钮容器上时:

self.html(obj.shareButtonsHtml);

我知道反斜杠是 JS 中的转义字符。谁能解释为什么我的同事在这里使用它们?他肯定不需要逃避回车或换行吗?他后来去了另一家公司,所以我不能问他!

4

3 回答 3

5

他正在逃避换行符。

如果你想要多行字符串,这是必需的,否则 JS 不会将下一行识别为字符串的一部分。

所以,是的,他确实“需要转义回车或换行符”。这正是他在那里所做的。

您可以使用字符串连接将字符串分布在多行上,但这意味着每次使用字符串时都会进行额外的操作。性能差异不是很显着,这主要是一个偏好问题。

多行字符串在 JS 中通常不起作用的原因是解释器(在大多数情况下*);在代码行的末尾添加了 a,如果它已经不存在的话。这就是为什么它;是可选的,但它也破坏了多行字符串。

*一个例外是对象/数组字面量,;'s 没有添加在那里,例如:

var obj = {
    a:1
}
于 2013-01-31T15:06:54.680 回答
4

反斜杠用于在此处转义换行符。例如,它也可以在命令行中使用。

David Walsh 写了一篇关于多行 javascript 字符串的优秀文章:http: //davidwalsh.name/multiline-javascript-strings

看来您的同事实际上是在使用加号 (+) 连接字符串的“缓慢而丑陋”方法之上的首选方法。

来自博客:

在每行末尾添加一个反斜杠告诉 JavaScript 引擎该字符串将继续到下一行,从而避免了自动分号插入的烦恼。

于 2013-01-31T15:06:55.160 回答
1

这只是允许他在多行上定义字符串(\正在转义“新行”字符)。

于 2013-01-31T15:07:11.610 回答