var a = "Test \'"
> undefined
var b = "Test '"
> undefined
a === b
> true
a
> "Test '"
是的。我知道两个叮咬是相同的(在示例代码中显示) - 问题是为什么
为什么逃避唱歌会产生如此奇怪的结果?请解释一下。
提前谢谢
答案 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:
您可以看到双引号字符串(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"
正如我所说,不出意外的兴奋只会被忽视。