JavaScript 转义字符串在 Firefox 开发者工具上不起作用

JavaScript Escaping Strings don’t work on Firefox Developer Tools

当我在 Firefox 上尝试转义字符串时,我注意到转义字符串在 Firefox Developer Tools 上不起作用,除非它们位于 console.log()alert() 留言。

例如,如果您在控制台中键入以下消息:

"The man whispered, \"please speak to me.\""

结果将与您输入的内容完全相同:

"The man whispered, \"please speak to me.\""

但是,如果您在 console.log() 中包含消息,则它可以正常工作:

输入:

console.log("The man whispered, \"please speak to me.\"");

输出:

The man whispered, "please speak to me."

我不知道这是某种错误还是我不知道的更深层次的东西,所以我 post 在这里,我希望有人能详细说明。

Firefox 的 Web 控制台作为 REPL environmentwindow.console 转储其输出的地方承担着双重职责。当您在 Web 控制台中键入 '"' 时,它会读取该字符串并将其评估为一行 Javascript,并以它认为您可以使用的形式为您提供 return 值。由于 '"' 求值为字符串,因此 Firefox 将结果作为字符串文字 "\"" 提供给您。但它仍然只包含一个字符,U+0022 QUOTATION MARK。您可以通过进一步测试亲眼看到:

» var str = '"'
⬅ undefined
» str
⬅ "\""
» str.length
⬅ 1
» str.charCodeAt(0)
⬅ 34

另一方面,当您使用 console.log() 时,Web 控制台会将提供给 console.log 的对象转储为日志消息。 Firefox 对于什么是有用的日志消息有不同的想法:对于字符串,易于阅读的消息比您可以将其复制回代码中的字符串文字更好。因此,

» console.log(str)
  "                                     debugger eval code:1:1
⬅ undefined

注意底部的 undefined:控制台仍在 REPLing。 " 线路 console.log 打断了您的谈话。