开发者

Detect version of JavaScript

How can I detect what version of JavaScript the browser supports (if any)? I want to check for ECMAScript 3 versus ECMAScript开发者_如何学JAVA 5 versus ECMAScript 6.

Note: I want to avoid the deprecated language tag.


Here is a good reference for you: http://www.docsteve.com/DocSteve/Samples/JS/js_version.html

Basically, use the deprecated language attribute of the script tag

console.log("javascript version =", js_version)
<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>


The solution proposed to http://www.docsteve.com/DocSteve/Samples/JS/js_version.html as simple JavaScript function (using "createElement" construction):

<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>


I suppose it depends on what you want to do with the information, but many people prefer to do feature detection, instead of figuring out what browser someone is using or what version of JS.

Check out Modernizr, which is a great library that does feature detection for you.


This pops out an alert box with the javascript version being used by your browser:

<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>

Related jsfiddle.net


Here is an extended ECMAScript detector (based off @Infigon's answer).

const ecmaScriptInfo = (function() {
                     // () => { is not allowed
  function getESEdition() {
    const array = [];
    switch (true) {
      case !Array.isArray:
        return 3;
      case !window.Promise:
        return 5;
      case !array.includes:
        return 6;
      case !''.padStart:
        return 7;
      case !Promise.prototype.finally:
        return 8;
      case !window.BigInt:
        return 9;
      case !Promise.allSettled:
        return 10;
      case !''.replaceAll:
        return 11;
      case !array.at:
        return 12;
      default:
        return 13;
    }
  }

  function getESYear(edition) {
    return {
      3: 1999,
      5: 2009
    }[edition] || 2009 + edition;
  }
  
  const edition = getESEdition();
  const year = getESYear(edition);

  return {
    edition: edition, // usually shortened [edition,]
    year: year,       // usually shortened [year,]
    text: 'Edition: '+ edition +' | Year: '+ year
       // `Edition: ${edition} | Year: ${year}` is not allowed
  }
})();

console.log(ecmaScriptInfo.edition);
console.log(ecmaScriptInfo.year);
console.log(ecmaScriptInfo.text);

The additions and changes are:

  • It adds a function closure to create private functions and variables.
  • It uses a switch for better performance.
  • It fixes the incorrect year for edition 5, by the use of an object literal, which was released 2009 (not 5 + 2009). A nullish coalescing would have been used, instead of an OR (||), but it did not exist in earlier editions.
  • It returns the values as an object that can be used however one wishes to. For example, console.log(ecmaScriptInfo.edition).

Note:

The Arrow Function Expression was introduced in edition 10 (2019); hence why a standard function call was used.

Object literal shared key and value shorthand came in later editions; hence why edition: edition was not shortened.

Template Literals was introduced in edition 9 (2018); hence why Edition: ${edition} | Year: ${year} was not used.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜