Я пишу JavaScript для переводчика Python и «\ 8» и «\ 9» вызывает у меня проблемы с множеством проблем. Согласно документации, что-то вроде «\ 8» или «\ 9» является незаконным, так как они не являются действительными восьмеричными экранами. Esprima parser исключает исключение из такого литерала. Однако двигатели JS, по-видимому, позволяют им, и они оценивают «8» и «9» соответственно.JavaScript « 8» буквально
Поэтому:
/\8/.exec("\8")
RegExp('\\8').exec('\8')
/\8/.exec("8")
RegExp('\\8').exec('8')
Если все вернуть спичкой, так как/\ 8/должна быть такой же, как/8 /. Однако результаты несовместимы с JS-двигателями, а некоторые возвращают совпадение, а другие - нет (например, Safari).
В чем причина всех этих различий? И каков правильный путь - как справляться с другими делами, связанными с этими литералами?
Двигатели JS в браузерах очень снисходительны (иногда слишком снисходительны для их же пользы), потому что продолжать работать - это функция. Транспилеры гораздо менее снисходительны, потому что ошибки лова - это особенность. – kay
Ваш вопрос немного неясен. Что именно вы ожидаете от матча, и что вы ожидали от него не совпадать? –
Проблема в том, что я понятия не имею, должны ли они совпадать или нет, потому что согласно спецификации эти утверждения являются незаконными, но они разрешены в Js Engines, и поэтому некоторые из моих модульных тестов терпят неудачу. Поэтому я ищу дополнительную информацию о том, как обращаться с этими случаями. –