Рубрики
Без рубрики

Познакомьтесь с различными средами JavaScript в реактивном родном

Под хоам-фамом познакомиться с различными средами JavaScript в Reactionsource Nationsource: Sport DiveraleAct Nare может быть очень легко начать, а затем в некоторых точках возникают проблемы, и нам нужно глубоко в него. На днях у нас была странная ошибка, которая была только встреченной только

Автор оригинала: FreeCodeCamp Community Member.

khoa pham.

React Naious можно очень легко Начните С, а затем в некоторые проблемы возникают проблемы, и нам нужно глубоко погружаться в него.

На днях у нас была странная ошибка, которая произошла только в производственной сборке, а в IOS только. Длинная задняя сторона в приложении показало, что это было связано с Дата отказ конструктора.

const date = new Date("2019-01-18 12:00:00")

Это возвращает правильный Дата Объект в режиме отладки, но дает Неверная дата в выпуске. Что особенного о Дата конструктор? Вот я использую React Nountry 0,57,5 и нет Дата Библиотеки.

Дата Конструктор

Лучший ресурс для изучения JavaScript – это через веб-документы Mozilla, и введя Дата :

Обратите внимание на то, как дата может быть построена по DateString:

Итак, Дата Конструктор использует статический метод Date.cary под капотом. Это имеет очень конкретное требование о формате строки даты, которое она поддерживает

Причина, по которой мы получаем неверную дату в iOS, должны быть потому, что код был запущен в двух разных средах JavaScript, и они как-то имеют разную реализацию функции анализа даты.

JavaScript среда

РЕАКТНАЯ РУКОВОДСТВО УДАЛЕННОГО РУКОВОДНОГО РАЗДЕЛЕНИЯ О Среда JavaScript Отказ

При использовании REACT NATURE, вы собираетесь запустить код JavaScript в двух средах:

  • В большинстве случаев реагируют родные будут использовать JavaScriptCore Двигатель JavaScript, который способствует Safari. Обратите внимание, что на iOS JavaScriptcore не использует JIT из-за отсутствия записи исполняемой записи в приложениях iOS.
  • При использовании Chrome отладки, весь код JavaScript работает в самом Chrome, общаясь с нативным кодом через Websockets. Chrome использует V8 как его JavaScript Engine.

Хотя обе среды очень похожи, вы можете попасть на некоторые несоответствия. Мы, вероятно, собираемся поэкспериментировать с другими двигателями JavaScript в будущем, поэтому лучше избежать полагаться на специфику любого времени выполнения.

React Nature также использует Babel и некоторые многолифики, чтобы иметь несколько хороших синтаксических трансформаторов, поэтому некоторые из кодов, которые мы пишем, возможно, не обязательно поддерживаются в результате боевиков JavaScriptCore Отказ

Теперь ясно, что пока мы отладим наше приложение через Chrome Rebugger, он работает, потому что двигатель V8 обрабатывает это. Теперь попробуйте отключить удаленные отладки JS: мы видим, что вышеуказанная дата конструктор не удается, что означает, что он использует JavaScriptCore Отказ

Чтобы подтвердить эту проблему, давайте запустим наше приложение в Xcode и перейдите в приложение Safari на MacOS, чтобы войти в меню разработки. Выберите активный симулятор и выберите JSContext в текущем приложении iOS. Не забудьте отключить дистанционную отладку JS, чтобы приложение использует JavaScriptCore:

Теперь открыть консоль в инструментах Safari DEV, и мы должны иметь доступ к JavaScriptCore внутри нашего приложения. Попробуйте запустить вышеуказанные Дата Конструктор, чтобы подтвердить, что он не удается:

Что такое форматы LegiT Date?

С 2016 года JavaScriptCore Поддерживает большинство функций ES6:

И было полностью подтверждено год спустя в ОАО? ES6

Для получения более подробной информации о функциях JavaScript поддерживается различными двигателями JavaScript, посетите эту Таблица сравнения Ecmascript Отказ

Теперь для формата строки даты, от Date.cary Давайте посетим спецификацию Ecmascript 2015, чтобы увидеть, о чем он говорит Дата Формат строки :

ECMAScript определяет формат обмена строка на дату, на основании упрощения расширенного формата ISO 8601. Формат выглядит следующим образом: Yyyy-mm-ddthth: mm: ss.sss Z.

Где поля являются следующими:

«Т» Появится буквально в строке, указывает на начало элемента времени.

Итак, JavaScriptCore требует T Спецификатор и V8 могут работать без него. Исправление на данный момент – всегда включать этот спектр т. Таким образом, мы всегда следуем стандартам Ecmascript, чтобы убедиться, что он работает в разных средах JavaScript.

const date = new Date("2019-01-18 12:00:00".replace(' ', 'T'))

И теперь это возвращает правильно Дата объект. Может быть разница между JavaScriptcore на iOS и MacOS и среди различных версий iOS. Урок узнал вот то, что мы всегда должны тщательно проверить наше приложение в производстве и на устройствах, чтобы убедиться, что он работает как ожидалось.