浏览器应该做的是分别跟踪字符串及其长度,因为标准中不存在空终止符。(字符串只是一个有长度的对象)。
Chrome似乎在做的(我相信你的话)是使用标准的 C 字符串函数,它在 \0 处终止。回答您的一个问题:是的,这对我来说构成了 Chrome 处理该alert()
功能的错误。
正式的规范说:
字符串文字是用单引号或双引号括起来的零个或多个字符。每个字符都可以用一个转义序列来表示。除了右引号字符、反斜杠、回车、行分隔符、段落分隔符和换行符之外,所有字符都可以按字面意思出现在字符串文字中。任何字符都可能以转义序列的形式出现。
还:
字符串文字代表 String 类型的值。文字的字符串值 (SV) 是根据字符串文字的各个部分贡献的字符值 (CV) 来描述的。
关于 NUL 字节:
EscapeSequence :: 0 [lookahead ∉ DecimalDigit] 的 CV [Character Value] 是 <NUL> 字符(Unicode 值 0000)。
因此,一个 NUL 字节应该只是“另一个字符值”并且没有特殊含义,这与它可能以 SV(字符串值)结尾的其他语言相反。
有关(有效)“字符串单字符转义序列”的参考,请查看ECMAScript 语言规范第 7.8.4 节。段落末尾有一个表格,列出了上述转义序列。
打算编写 Javascript 引擎的人可能会从中学到:不要使用 C/C++ 字符串函数。:)