【发布时间】:2016-05-04 13:08:57
【问题描述】:
var a = "Test \'"
> undefined
var b = "Test '"
> undefined
a === b
> true
a
> "Test '"
是的。我知道两个刺是相等的(在示例代码中显示) - 问题是 为什么
为什么转义 sing 引用会产生如此奇怪的结果?请解释一下。
提前谢谢
【问题讨论】:
标签: javascript escaping
var a = "Test \'"
> undefined
var b = "Test '"
> undefined
a === b
> true
a
> "Test '"
是的。我知道两个刺是相等的(在示例代码中显示) - 问题是 为什么
为什么转义 sing 引用会产生如此奇怪的结果?请解释一下。
提前谢谢
【问题讨论】:
标签: javascript escaping
我知道两个刺是相等的(在示例代码中显示) - 问题是 为什么
转义字符是从不字符串值的一部分。它仅由解析器用于确定字符串值。
规范解释how escape sequences are evaluated:
您可以看到双引号字符串 (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 \\' abc".
他们是平等的:
"Test '".length // 6
"Test \'".length // 6
下表列出了您可以在 JavaScript 字符串中使用的特殊字符:\0 \b \f \n \r \t \v \' \" \\ \XXX \xXX \uXXXX \u{XXXXX}
对于表中未列出的字符,前面的反斜杠将被忽略,但这种用法已被弃用,应避免使用。
简历:
JavaScript 将字符串 "Test \'" 转换为 "Test '",然后与另一个 "Test '" 字符串进行比较。
【讨论】:
\' 和' 是一样的。反斜杠仅用于转义字符串中我的问题中列出的特殊字符。
在我看来,由于双引号的存在,解释器会自动转义单引号 ' 所以它看到字符串以 " 开头并接受文本中的任何内容。
它期望 \ 是一个转义字符,所以 \' 将只产生 ' 它还期望 " 终止字符串,因此将允许 ' 在字符串主体中相同。因此在内存中,两个字符串都将是
Test "
这只是我的猜测,但对我来说似乎是最合理的。 a===b 是真的,因为这两个字符串实际上是相同的。我不知道 javascript 在后台是如何工作的,但在大多数编程语言中,a 和 b 实际上都指向内存中的同一个对象。
【讨论】:
你的转义是没有用的,所以解释器忽略它。
var a = "Test \'"
var b = "Test '"
a
> "Test '"
b
> "Test '"
如果你写:
var a = "\a";
a
> "a"
正如我所说,意外的扩展只是被忽略了。
【讨论】: