字符串中的空字符

Den*_*ret 17 javascript string unicode google-chrome null-terminated

考虑这个字符串:

var s = "A\0Z";
Run Code Online (Sandbox Code Playgroud)

其长度为3,如下所示s.length.使用console.log您可以看到该字符串不会削减,并且s[1]""s.charCodeAt(1)0.

当您在Firefox中提醒它时,您会看到AZ.当您在Chrome/Linux中使用时提醒它时alert(s),会\0终止字符串,您会看到A.

我的问题是:浏览器和Javascript引擎该做什么?这里有Chrome车吗?是否有文件定义应该发生什么?

由于这是关于标准的问题,因此需要参考.

Gun*_*Foo 15

浏览器应该做的是分别跟踪字符串及其长度,因为标准中没有空终止符.(字符串只是一个有长度的对象).

Chrome 似乎做了什么(我接受你的话)就是使用终止于\ 0的标准C字符串函数.回答你的一个问题:是的,这对我来说构成了Chrome处理该alert()功能的一个错误.

正式规范说:

字符串文字是用单引号或双引号括起来的零个或多个字符.每个字符可以由转义序列表示.除了结束引号字符,反斜杠,回车符,行分隔符,段落分隔符和换行符之外,所有字符都可以按字面意思显示在字符串文字中.任何字符都可以以转义序列的形式出现.

也:

字符串文字代表String类型的值.文字的字符串值(SV)根据字符串文字的各个部分贡献的字符值(CV)来描述.

关于NUL字节:

EscapeSequence :: 0 [lookahead∉DecimalDigit]的CV [字符值]是<NUL>字符(Unicode值0000).

因此,NUL字节应该只是"又一个字符值"并且没有特殊含义,与其他可能结束SV(字符串值)的语言相反.

有关(有效)"字符串单字符转义序列"的参考,请参阅ECMAScript语言规范第7.8.4节.该段末尾有一个表格,列出了上述的逃逸序列.

有人想要编写Javascript引擎的人可能会从中学到:不要使用C/C++字符串函数.:)

  • @AlvinWong我输入了[issue 164126](http://code.google.com/p/chromium/issues/detail?id=164126) (4认同)

den*_*cey 6

Javascript像任何其他角色一样处理空字符,你的问题是如何在cosole或警报中显示它,它在不同的浏览器中有所不同,没有关于此的标准,所以chrome是可以的.

  • 我不明白为什么这是低估的.虽然紧凑,但在纳尔逊回答之前,这是最正确的答案,更详细地说明了这一点. (2认同)