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++字符串函数.:)
Javascript像任何其他角色一样处理空字符,你的问题是如何在cosole或警报中显示它,它在不同的浏览器中有所不同,没有关于此的标准,所以chrome是可以的.
归档时间: |
|
查看次数: |
16632 次 |
最近记录: |