是否附加 Chrome 调试器,日期构造函数的工作方式不同
Date constructor works differently whether Chrome Debugger is attached
我遇到了一个非常奇怪的问题。 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 }
Update:将 "June 1, 2013" 传递给构造函数可以使用或不使用调试器。所以我现在的特殊问题已经解决了。
我仍然想知道为什么会发生这种情况。
这是JavaScript环境不同造成的。查看文档 here:
JavaScript Runtime
When using React Native, you're going to be running your JavaScript
code in two environments:
- In most cases, React Native will use JavaScriptCore, the JavaScript engine that powers Safari. Note that on iOS, JavaScriptCore
does not use JIT due to the absence of writable executable memory in
iOS apps.
- When using Chrome debugging, all JavaScript code runs within Chrome itself, communicating with native code via WebSockets. Chrome
uses V8 as its JavaScript engine.
While both environments are very similar, you may end up hitting some
inconsistencies. We're likely going to experiment with other
JavaScript engines in the future, so it's best to avoid relying on
specifics of any runtime.
问题是日期构造函数非常挑剔,因此您需要小心创建日期的方式。
一种流行的解决方法是使用 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");
我遇到了一个非常奇怪的问题。 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 }
Update:将 "June 1, 2013" 传递给构造函数可以使用或不使用调试器。所以我现在的特殊问题已经解决了。
我仍然想知道为什么会发生这种情况。
这是JavaScript环境不同造成的。查看文档 here:
JavaScript Runtime
When using React Native, you're going to be running your JavaScript code in two environments:
- In most cases, React Native will use JavaScriptCore, the JavaScript engine that powers Safari. Note that on iOS, JavaScriptCore does not use JIT due to the absence of writable executable memory in iOS apps.
- When using Chrome debugging, all JavaScript code runs within Chrome itself, communicating with native code via WebSockets. Chrome uses V8 as its JavaScript engine.
While both environments are very similar, you may end up hitting some inconsistencies. We're likely going to experiment with other JavaScript engines in the future, so it's best to avoid relying on specifics of any runtime.
问题是日期构造函数非常挑剔,因此您需要小心创建日期的方式。
一种流行的解决方法是使用 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");