我在这里遇到一个非常奇怪的问题。 JS根据是否安装了调试器,对new Date("6-1-2013")
的评估方式有所不同。我正在Expo上运行React Native应用。
这些是从我的代码中运行以下代码的结果:
console.log('new Date("6-1-2013"),', new Date("6-1-2013"));
使用调试器:
new Date("6-1-2013"), 2013-06-01T04:00:00.000Z
没有调试器:
new Date("6-1-2013"), Date { NaN }
更新:无论是否带有调试器,都将“ 2013年6月1日”传递给构造函数。因此,目前我的特定问题已解决。
我仍然想知道为什么会这样发生。
答案 0 :(得分:2)
这是由不同的JavaScript环境引起的。查看文档here:
JavaScript运行时
使用React Native时,您将运行JavaScript 两种环境中编写代码:
- 在大多数情况下,React Native将使用JavaScriptCore(为Safari提供支持的JavaScript引擎)。请注意,在iOS上,JavaScriptCore 由于不存在可写的可执行内存,因此不使用JIT iOS应用。
- 使用Chrome调试时,所有JavaScript代码都在Chrome本身中运行,并通过WebSockets与本机代码进行通信。铬 使用V8作为其JavaScript引擎。
虽然两种环境都非常相似,但是您最终可能会遇到一些 不一致之处。我们可能会尝试其他 未来的JavaScript引擎,因此最好避免依赖 任何运行时的细节。
问题在于日期构造函数确实很挑剔,因此您在创建日期时需要小心。
一个流行的解决方法是使用moment.js。 Moment.js将为您处理后台的所有日期转换,并且将在所有平台,JavaScript引擎等上运行。
使用以下命令安装moment.js:
npm --install moment
然后您可以替换:
new Date("6-1-2013")
具有:
import Moment from 'moment';
//second parameter is the specified format of your date string
const date = Moment("6-1-2013", "M-D-YYYY");