Javascript 奇怪的单引号转义

Javascript 奇怪的单引号转义,javascript,escaping,Javascript,Escaping,是的。我知道这两种刺痛是相等的(在示例代码中显示)——问题是为什么 为什么会产生如此奇怪的结果?请解释一下 Thx PREVANCE字符串中的反斜杠用于转义以下字符。在双引号字符串中使用单引号时,不需要转义单引号 因此, 考虑一种情况,您希望在字符串中同时包含单引号和双引号。在这种情况下,应该有一些方法来转义内部引号,否则编译器将在无效字符串处抛出错误。通过使用反斜杠\,可以对以下字符进行转义,并将其视为普通文字,而不是上下文中的特殊含义 "Test \'s" === "Test 's" 'Te

是的。我知道这两种刺痛是相等的(在示例代码中显示)——问题是为什么

为什么会产生如此奇怪的结果?请解释一下


Thx PREVANCE

字符串中的反斜杠用于转义以下字符。在双引号字符串中使用单引号时,不需要转义单引号

因此,

考虑一种情况,您希望在字符串中同时包含单引号和双引号。在这种情况下,应该有一些方法来转义内部引号,否则编译器将在无效字符串处抛出错误。通过使用反斜杠
\
,可以对以下字符进行转义,并将其视为普通文字,而不是上下文中的特殊含义

"Test \'s" === "Test 's"
'Test\"s'  === 'Test"s'
他们是平等的:

"He said, \"My name is something, I stay at my uncle's house.\""
下表列出了可以在JavaScript字符串中使用的特殊字符:
\0\b\f\n\r\t\v\'\“\\\XXX\XXX\uxxx\u{XXXXX}

对于表中未列出的字符,将忽略前面的反斜杠,但不推荐使用此用法,应避免使用

简历:


JavaScript将字符串
“Test\'”
转换为
“Test'
,然后与另一个
“Test'
字符串进行比较。

在我看来,由于双引号的存在,解释器会自动转义单引号,因此它看到字符串以“并接受文本中的任何内容

它希望\是转义字符,因此\'将产生' 它还希望字符串正文中的“终止字符串,因此将允许”。因此,在内存中,两个字符串都是

"Test '".length // 6
"Test \'".length // 6

这只是我的猜测,但对我来说似乎是最合理的。a===b是真的,因为两个字符串实际上是相同的。我不知道javascript在后台是如何工作的,但在大多数编程语言中,a和b实际上都指向内存中的同一个对象。

您的转义是无用的,因此解释器忽略它

Test "
如果你写:

var a = "Test \'"
var b = "Test '"

a
> "Test '"
b
> "Test '"
正如我所说的,我们忽略了非意外的挖掘

我知道这两种刺痛是相等的(在示例代码中显示)——问题是为什么

转义字符是字符串值的从不部分。它仅由解析器用于确定字符串值

规范说明:


您可以看到,双引号字符串(
DoubleStringCharacter
)中的转义序列的计算方法与单引号字符串(
SingleStringCharacter
)中的转义序列的计算方法完全相同。两者都计算
\EscapeSequence

我知道。它在我的问题中描述过。问题是“为什么?”@VasiliyVanchuk我已经添加了解释如果我使用双引号,为什么它会解析为单引号的转义?@VasiliyVanchuk正如我已经说过的,是转义它后面的任何内容,没有必要在双引号中转义单引号e、 如果要在字符串中使用反斜杠,也必须将反斜杠转义。
“Test\\”abc“
。如果不需要-为什么要像esxaping一样解析\?我知道。我的问题中描述了这一点。问题是“为什么?”实际上在JavaScript中,
是相同的。反斜杠只用于转义我的问题中列出的字符串中的特殊字符。如果我使用双引号,为什么它解析\为转义?我知道。我的问题中描述了这一点。问题是“为什么?”如果我使用双引号,为什么会将\解析为转义?因为\始终是转义字符。使用单引号还是双引号并不重要。
var a = "Test \'"
var b = "Test '"

a
> "Test '"
b
> "Test '"
var a = "\a";
a
> "a"