Reputation: 116443
How can I detect what version of JavaScript the browser supports (if any)? I want to check for ECMAScript 3 versus ECMAScript 5 versus ECMAScript 6.
Note: I want to avoid the deprecated language
tag.
Upvotes: 46
Views: 65163
Reputation: 1583
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:
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.
Upvotes: 0
Reputation: 261
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>
Upvotes: 20
Reputation: 146360
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>
Upvotes: 22
Reputation: 953
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>
Upvotes: 10
Reputation: 41842
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.
Upvotes: 12