在C#中你可以使用这样的逐字字符串:
@"\\server\share\file.txt"
JavaScript中有类似内容吗?
答案 0 :(得分:13)
模板字符串支持换行符。
`so you can
do this if you want`
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals
它当然不会阻止文本中的扩展,并且通过扩展,代码执行但这可能是一件好事吗?
注意:我认为没有办法获取现有字符串并通过表达式插值运行它。这使得无法以这种方式注入代码,因为代码必须源自源代码。我不知道可以按需进行表达式插值的API。
注2:模板字符串是ES2015 / ES6的一项功能。支持每个浏览器,除了(等待它......)IE!但是,Edge确实支持模板字符串。
注3:模板字符串展开转义序列,如果字符串中有一个字符串,该字符串将扩展其转义序列。
`"A\nB"`
...将导致:
"A B"
...这不适用于
JSON.parse
,因为现在字符串文字中有一个新行。可能很高兴知道。
答案 1 :(得分:8)
不,JavaScript中不支持。而这种解决方法似乎很成问题,因为你现在失去了正斜率的能力。
当我需要从ASP.NET后端构建警报消息或其他内容时,我自己遇到了这个问题,并将其粘贴在前端的JavaScript警报中。问题是开发人员可以在Page.Alert()方法中输入任何内容。
我要解决的问题如下:
public void Alert(string message)
{
message = message.Replace("\\", "\\\\")
.Replace("\r\n", "\n")
.Replace("\n", "\\n")
.Replace("\t", "\\t")
.Replace("\"", "\\\"");
// and now register my JavaScript with this safe string.
}
答案 2 :(得分:5)
这是一个非常古老的主题,但仍然是一个解决方法:
function verbatim(fn){return fn.toString().match(/[^]*\/\*\s*([^]*)\s*\*\/\}$/)[1]}
您将使用以下内容:
var myText = verbatim(function(){/*This
is a multiline \a\n\0 verbatim line*/})
基本上这里发生的是js将评论确实视为逐字字符串。此外,这些与功能一起存储。所以这里发生的是我们创建一个带有一些逐字注释的函数,我们在逐字函数中提取这些注释。
答案 3 :(得分:4)
解决方法的大问题......
<html>
<head>
<script>
function foo() {
var string = document.getElementById('foo').innerHTML;
alert(string);
}
window.onload=foo;
</script>
<style>
#foo{
display: none;
}
</style>
</head>
<body>
Calling foo on page load.
<div id="foo">\\server\path\to\file.txt</div>
</body>
</html>
答案 4 :(得分:2)
我将重新讨论之前所说的内容 - 在javascript中无法使用逐字字符串。它实际上很容易逃脱有效的转义字符,如\n \\ \t
等,但问题来自转义无效字符,因为它们在不同的函数中处理它们变得不兼容。例如
"\a".replace("\a","\\a") // WORKS \a
"aa\a".replace("\a", "\\a") // FAILS \aaa
此外,如果您查看一系列非法特殊字符,例如["\a"]
,该字符将看起来像a
。这使得你想做的事情基本上不可能。
希望至少为你清除它。
答案 5 :(得分:2)
只需使用String.raw()
String.raw`\n`
将输出
\\n
但我不知道如何解决此案:
String.raw`hello`hello` // It will throw an TypeError
String.raw`hello\`hello` // Output is 'hello\\`hello'
我不知道如何处理`
:(
答案 6 :(得分:2)
是的,我们可以使用静态String.raw()。它是ECMAScript 6(ES6)中引入的。这类似于Python中的r前缀,或字符串文字中C#中的@前缀。
这用于获取模板字符串的原始字符串形式(即原始的未解释文本)。
语法:
String.raw(callSite, ...substitutions)
or
String.raw`template string`
示例:
const filePath_SimpleString = 'C:\\Development\\profile\\aboutme.html';
const filePath_RawString = String.raw`C:\Development\profile\aboutme.html`;
console.log(`The file was uploaded from: ${filePath}`);
console.log(`The file was uploaded from: ${filePath}`);
// expected output will be same:
//"The file was uploaded from: C:\Development\profile\aboutme.html"