Определить версию JavaScript

Как я могу определить, какую версию JavaScript поддерживает браузер (если есть)? Я хочу проверить ECMAScript 3 против ECMAScript 5 против ECMAScript 6.

Примечание: я хочу избежать устаревшего language тег.

5 ответов

Решение

Я полагаю, это зависит от того, что вы хотите сделать с информацией, но многие люди предпочитают обнаруживать функции, вместо того, чтобы выяснить, какой браузер кто-то использует или какую версию JS.

Проверьте Modernizr, которая является отличной библиотекой, которая делает функцию обнаружения для вас.

Вот хорошая ссылка для вас: http://www.docsteve.com/DocSteve/Samples/JS/js_version.html

В основном используйте устаревший языковой атрибут тега script

<script language="javascript">var js_version="1.0"</script>
<script language="javascript1.1">var js_version="1.1"</script>
<script language="javascript1.2">var js_version="1.2"</script>
<script language="javascript1.3">var js_version="1.3"</script>
<script language="javascript1.4">var js_version="1.4"</script>
<script language="javascript1.5">var js_version="1.5"</script>
<script language="javascript1.6">var js_version="1.6"</script>

Решение было предложено http://www.docsteve.com/DocSteve/Samples/JS/js_version.html качестве простой функции JavaScript (с использованием конструкции "createElement"):

<script type="text/javascript">
function get_js_version ()
{
    this.jsv = {
            versions: [
                "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0"
            ],
            version: ""
        };

    var d = document;

    for (i = 0; i < jsv.versions.length; i++) {
        var g = d.createElement('script'),
            s = d.getElementsByTagName('script')[0];

            g.setAttribute("language", "JavaScript" + jsv.versions[i]);
            g.text = "this.jsv.version='" + jsv.versions[i] + "';";
            s.parentNode.insertBefore(g, s);
    }

    return jsv.version;
}

document.write('JavaScript Version: ' + get_js_version());
</script>

Это выскакивает окно предупреждения с версией javascript, используемой вашим браузером:

<script type="text/javascript">
  var jsver = 1.0;
</script>
<script language="Javascript1.1">
  jsver = 1.1;
</script>
<script language="Javascript1.2">
  jsver = 1.2;
</script>
<script language="Javascript1.3">
  jsver = 1.3;
</script>
<script language="Javascript1.4">
  jsver = 1.4;
</script>
<script language="Javascript1.5">
  jsver = 1.5;
</script>
<script language="Javascript1.6">
  jsver = 1.6;
</script>
<script language="Javascript1.7">
  jsver = 1.7;
</script>
<script language="Javascript1.8">
  jsver = 1.8;
</script>
<script language="Javascript1.9">
  jsver = 1.9;
</script>


<script type="text/javascript">
  alert(jsver);
</script>

Связанные jsfiddle.net

Вот расширенный детектор ECMAScript (на основе ответа @Infigon ).

Дополнения и изменения следующие:

  • Он добавляет замыкание функции для создания частных функций и переменных.
  • Он использует переключатель для повышения производительности .
  • Он исправляет неверный год для издания 5, используя объектный литерал , который был выпущен в 2009 году (а не 5 + 2009). Вместо OR (||) можно было бы использовать нулевое объединение, но оно не существовало в более ранних выпусках .
  • Он возвращает значения в виде объекта, который можно использовать по своему усмотрению. Например,console.log(ecmaScriptInfo.edition).

Примечание:

Выражение функции стрелки было представлено в выпуске 10 (2019 г.); поэтому был использован стандартный вызов функции.

Общий ключ и сокращение общего ключа и значения литерала объекта появились в более поздних выпусках; поэтому почемуedition: editionне был сокращен.

Литералы шаблонов были представлены в выпуске 9 (2018 г.); поэтому почемуEdition: ${edition} | Year: ${year}не использовался.

Другие вопросы по тегам