奇怪的单引号逃脱

时间:2016-05-04 13:08:57

标签: javascript escaping

var a = "Test \'"
> undefined
var b = "Test '"
> undefined
a === b
> true
a
> "Test '"

enter image description here

是的。我知道两个叮咬是相同的(在示例代码中显示) - 问题是为什么

为什么逃避唱歌会产生如此奇怪的结果?请解释一下。

提前谢谢

5 个答案:

答案 0 :(得分:3)

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

因此,

"Test \'s" === "Test 's"
'Test\"s'  === 'Test"s'

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

"He said, \"My name is something, I stay at my uncle's house.\""

答案 1 :(得分:3)

他们是平等的:

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

下表列出了您可以在JavaScript字符串中使用的特殊字符:\0 \b \f \n \r \t \v \' \" \\ \XXX \xXX \uXXXX \u{XXXXX}

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

<强>恢复

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

答案 2 :(得分:3)

  

我知道两个叮咬是相同的(在示例代码中显示) - 问题是为什么

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

规范解释了how escape sequences are evaluated

enter image description here

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

答案 3 :(得分:1)

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

它希望\是一个转义字符,因此\'将产生' 它还期望“终止字符串,因此将允许在字符串体中相同。因此在内存中,两个字符串将

Test "

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

答案 4 :(得分:0)

你的逃避是无用的,所以解释者会忽略它。

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

a
> "Test '"
b
> "Test '"

如果你写:

var a = "\a";
a
> "a"

正如我所说,不出意外的兴奋只会被忽视。

相关问题