V8是否自动解析字符串中的ascii字符

Does V8 automatically parse ascii characters from strings?

本文关键字:ascii 字符 字符串 是否 V8      更新时间:2023-09-30

我注意到Chrome与Firefox之间存在一些不一致。我基本上是想用我从Dom上刮下来的绳子来创建一个新的约会对象。

// Assume dateString was pull from a Dom node.
var dateString = 'Nov'xa025, 2013'; 
var date = new Date(dateString);

您会注意到dateString中包含ascii非中断空格字符。因此,当在Chrome控制台中运行时,date==有效日期。另一方面,Firefox不喜欢ascii字符和日期!=有效日期。

补救办法是用实际的空格替换ascii。我很好奇V8是否在为我们清理字符串,而不仅仅是为新的Date()?

否,两种浏览器解析字符串文字的方式相同:

> 'Nov'xa025, 2013'.charCodeAt(3)
160
> 'Nov 25, 2013'.charCodeAt(3)
32

但是,不同浏览器的Date构造函数不同。EMCAScript规范只需要一种日期格式(即YYYY-MM-DDTHH:mm:ss.sssZ),但实现可以自由支持自定义日期格式:

如果String不符合[EMMAScript defined]格式,则函数可能会回退到任何特定于实现的启发式方法或特定于实施的日期格式。

显然,Chrome支持自定义日期格式,允许不间断的空格,而Firefox没有。

它保持字符串原样,您可以尝试

dateString.charCodeAt(3)

以证实这一点。