它们是相等的:
"Test '".length // 6
"Test \'".length // 6
\0 \b \f \n \r \t \v \' \" \\ \XXX \xXX \uXXXX \u{XXXXX}
对于未在表格中列出的字符,前导反斜杠将被忽略,但这种用法已被弃用,应避免使用。"Test \'"
转换为"Test '"
,然后与另一个"Test '"
字符串进行比较。DoubleStringCharacter
)与单引号字符串中的转义序列(SingleStringCharacter
)完全相同。两者都评估\ EscapeSequence
。字符串中的反斜杠用于转义后面的字符。当在双引号字符串内使用单引号时,不需要转义单引号。
因此,
"Test \'s" === "Test 's"
'Test\"s' === 'Test"s'
考虑一种情况,你想在一个字符串中包含单引号和双引号。在这种情况下,应该有一些方法来转义内部引号,否则编译器将抛出无效字符串的错误。通过使用反斜杠\
,可以转义以下字符,并将其视为普通文字而不是它在上下文中的特殊含义。
"He said, \"My name is something, I stay at my uncle's house.\""
我觉得解释器自动转义了单引号',因为双引号"的存在。所以它会把字符串开头看作",并接受文本中的任何内容。
它期望\是一个转义字符,所以\'将只生成'。 它还期望"结束字符串,所以在字符串主体中允许使用'。因此,在内存中,这两个字符串都将是
Test "
这只是我的猜测,但对我来说似乎是最合理的。a===b是真的,因为两个字符串实际上是相同的。我不知道javascript在后台如何工作,但在大多数编程语言中,a和b实际上都指向内存中的同一对象。
你的转义是无用的,所以解释器会忽略它。
var a = "Test \'"
var b = "Test '"
a
> "Test '"
b
> "Test '"
如果你写:
var a = "\a";
a
> "a"
就像我说的,一个意外的转义符会被忽略。
\'
与'
是相同的。反斜杠仅用于在字符串中转义我在问题中列出的特殊字符。 - Ali Mamedov