V8会自动解析字符串中的ascii字符吗?

时间:2013-11-25 21:34:39

标签: javascript google-chrome firefox v8

我发现Chrome与Firefox存在一些不一致之处。我基本上试图从我从Dom上删掉的字符串创建一个新日期。

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

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

补救措施是将ascii替换为实际空间。我很好奇V8是否正在为我们清理字符串,而不仅仅是为了新的Date()?

2 个答案:

答案 0 :(得分:2)

不,两个浏览器都以相同的方式解析字符串文字:

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

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

但是,日期构造函数在浏览器之间有所不同。 EMCAScript规范requires only one date format(即YYYY-MM-DDTHH:mm:ss.sssZ)但custom date formats may be freely supported by an implementation

  

如果字符串不符合[ECMAScript定义的]格式,则该函数可以回退到任何特定于实现的启发式或特定于实现的日期格式。

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

答案 1 :(得分:1)

它保持字符串不变,你可以尝试

dateString.charCodeAt(3)

确认。