这是一个奇怪的问题,但由于我对此非常好奇,我想问一下.当我启用远程调试时,我有一段在iOS模拟器中工作的代码,但没有它就会停止工作.这是代码:
let filtered = [] let dueDate const dateNow = new Date(Date.now()) for (let item of this.props.listData) { dueDate = new Date(item.dueDate) if (!item.paid && (dueDate < dateNow)) { filtered.push(item) } } if (filtered.length > 0) { this.setState({ dataSource: this.state.dataSource.cloneWithRows(filtered) }) }
(item.dueDate是一个类似“12.02.2016”的字符串)
如果我以正确的格式提供日期(如ISO“2016-02-12”),显然代码可以工作(并且可以工作).我感兴趣的是,当我启用远程调试(启动Google Chrome实例)时,为什么即使格式错误也能正常工作?因为当我在控制台.log中记录Chrome中的日期时,它们会正常转换.提前致谢!
这很可能是由于设备上的JavaScript执行环境与远程调试器之间的细微差别造成的.
在这种情况下,Date构造函数似乎接受Chrome远程调试环境中的特定于语言环境的日期格式,但不接受设备上的日期格式.这可能是由于您的计算机的区域设置已设置为使用dd.MM.yyyy格式的文化,而模拟器设置为其他内容,例如en-US. ISO格式适用于两者,因为无论语言环境如何都支持它.
当您在设备或模拟器上运行代码时,代码将在设备本身的JavaScriptCore中执行.这是React Native在内部用于运行应用程序脚本的JavaScript引擎
当您打开远程调试时,React Native打包器将改为执行计算机Chrome的JavaScript引擎V8中的代码,并通过WebSockets在浏览器和设备/模拟器之间发送消息.
您遇到了许多使React Native中的远程调试不可靠的边缘情况之一.您应该始终在没有调试器的情况下测试真实设备上的所有功能.