Автоматизированный набор тестов, безусловно, хорошая идея.
Поскольку все больше и больше реализаций внедряют ES5 , запуск набора тестов для вашего скрипта / библиотеки / приложения в новых браузерах является хорошим способом обеспечения совместимости.
У меня есть таблица совместимости ES5 , в которой указан уровень поддержки некоторых наиболее популярных реализаций. Он не исчерпывающий, но показывает общее направление - последние версии IE, WebKit, Chrome и Firefox имеют неплохую поддержку ES5. Для полного теста на соответствие вы всегда можете запустить официальный набор тестов ES5 (который для удобства доступен онлайн прямо здесь ).
Если нет набора тестов (который действительно должен существовать, поскольку он очень полезен по нескольким другим причинам), вы можете просто запустить скрипт / библиотеку / приложение в одной из более новых (соответствующих ES5) реализаций и посмотреть, что работает и что выходит из строя.
Консультации Приложение E - это еще один способ. Обратите внимание, что хотя список кажется довольно большим, он не так плох, как кажется. Одной из целей ES5 было сделать переход от ES3 более или менее безболезненным, перенеся более радикальные изменения в область opt-in строгого режима .
Многие изменения совместимости из этого списка, вероятно, останутся незамеченными. Возьмем, к примеру, изменение в 15.1.1, где глобальные undefined
, NaN
и Infinity
теперь доступны только для чтения. Учитывая, что вменяемые приложения не переназначают эти глобальные свойства - за исключением по ошибке - это изменение больше похоже на "ловушку ошибок", чем на "app-breaker".
Еще одно невинное изменение в версии 15.10.2.12, где класс пробельных символов (\s
) теперь также соответствует символу (U+FEFF
). Учитывая все отклонения в текущих реализациях (даже в отношении ES3), это изменение, вероятно, останется незамеченным в большинстве приложений.
Однако есть также более опасных изменений , таких как изменения в parseInt
и то, как он больше не обрабатывает строки, начинающиеся с 0, как восьмеричные значения. parseInt('010')
больше не должен выдавать 8
(хотя некоторые реализации решили сознательно нарушать это поведение ). И все же, полагаться на parseInt
без второго «радикального» аргумента никогда не было хорошей практикой. Так что, если ваше приложение всегда задает radix, вам не о чем беспокоиться.
Так что обратитесь к Приложению E, протестируйте свой сценарий в более новых реализациях (желательно нескольких) и следуйте рекомендациям . Это хороший способ обеспечить совместимость.