我注意到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字符和date!=有效日期。
补救措施是只用实际空间替换ascii。我很好奇V8是否正在为我们进行这种字符串清洗,而不仅仅是为新的Date()?
最佳答案
不,两个浏览器都以相同的方式解析字符串文字:
> '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-defined]格式,则该函数可能会退回到任何特定于实现的启发式或特定于实现的日期格式。
显然,Chrome支持自定义日期格式,该格式允许使用不间断的空格,而Firefox则不允许。
关于javascript - V8是否会自动解析字符串中的ASCII字符?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20203821/