你能否创建一个不使用 ' 或 " 引号的 JavaScript 字符串?

13
我有一个JS文件,其中包含一些XML内容,这些XML内容应该由服务器转换为Word文档。例如:
var ip = "<lang:cond><lang:when test="$(VAR{'ip_addr'})">$(VAR{'ip_addr'})</lang:when></lang:cond>";

这会被转换成:

var ip = "192.168.0.0";

然而,如果服务器不能按预期工作,我不希望出现语法错误,这非常重要。目前会出现语法错误,因为该语言使用了两种引号类型。我想不到解决这个问题的方法,但也许有另外一种在JavaScript中使用引号或创建字符串的方式?

例如,在Python中我会使用三重引号:

ip = """<lang:cond><lang:when test="$(VAR{'ip_addr'})">$(VAR{'ip_addr'})</lang:when></lang:cond>"""

有人有好主意吗?


为什么不单独检索XML?这样你就不需要担心引号的问题了。 - Tadeck
字符串必须用引号括起来才能创建。在JavaScript中创建字符串的另一种方法是使用var str = new String("ok"),此时str的值为"ok"。 - The Alpha
@Heera - 字符串确实可以在不使用引号的情况下创建。String.fromCharCode(72,69,76,76,79)会生成字符串HELLO。(我知道这对此情况没有帮助,但无论如何...) - nnnnnn
好的,聪明的回答,感谢您,但正如您所说,在这种情况下并没有帮助。 - The Alpha
5个回答

35

我曾经为一个项目创建了没有引号的字符串。我们将可执行的客户端JavaScript传递到内部网站的浏览器。接收端在显示时会去除双引号和单引号。我发现一个避开引号的方法是将我的字符串声明为正则表达式。

var x = String(/This contains no quotes/);
x = x.substring(1, x.length-1);
x;

1
哇,这是个好技巧。它帮助我解决了一个问题,我需要表示“一个字符串在另一个字符串中,在另一个字符串中,在另一个字符串中”。 :) 我正在使用 PHP 返回一个 JSON 字符串 (1),其中包含一些 HTML </a> 标签 (2),其中一个标签需要包括一个 onclick="" 属性 (3),该属性调用一个需要一个字符串参数的 JavaScript 方法处理程序 (4)。我已经没有办法嵌入引号,但不破坏 JS 解析器,当这个聪明的技巧给了我第三种方式来表示所有东西。太棒了,谢谢! - elrobis
1
谢谢!这真的太有帮助了,你甚至无法想象。 - Jose Romero
3
/This contains no quotes/.source - frobinsonj

10

使用 String 原型:

String(/This contains no quotes/).substring(1).slice(0,-1)
使用 String.fromCharCode
String.fromCharCode(72,69,76,76,79)

为此生成字符代码:

var s = "This contains no quotes";
var result = [];
for (i=0; i<s.length; i++)
{
    result.push(s.charCodeAt(i));
}
result

5

5
在JavaScript中,您可以使用\来转义任何类型的引号。
例如:
var str = "This is a string with \"embedded\" quotes.";
var str2 = 'This is a string with \'embedded\' quotes.';

特别是,你的JavaScript代码块应该被转换为:

var ip = "<lang:cond><lang:when test=\"$(VAR{'ip_addr'})\">$(VAR{'ip_addr'})</lang:when></lang:cond>";

一般来讲,在IT技术领域,我总是更倾向于转义引号,而不是不停地改变引号类型以适应可能使用的不同类型引号。


不幸的是,它并不起作用,因为由于某种原因,XML与转义引号不兼容。 - Jeff
1
@Jeff - 当JavaScript从字符串中读取内容时,转义引号将被取消转义,XML将不再具有转义引号。 - ziesemer

0

如果你不使用单引号或双引号,就无法创建字符串,即使直接调用String()原型对象,仍然需要传递字符串。

在XML中,你可以使用CDATA,但在JS中,你必须适当地转义'\"strings\"'"\'appropriately\'"


9
当然可以在不使用引号的情况下创建字符串。我并不是说这对解决问题有任何帮助,但是String.fromCharCode(72,69,76,76,79)会生成字符串HELLO - nnnnnn
啊哈,太棒了的想法。既然你提到了那个向量,我敢打赌你可以使用一些JavaScript混淆技术来做到这一点。 - buley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接