跳至正文
LNN的博客!

鉴别浏览器ECMAScript版本

所谓ECMAScript(ES),就是JavaScript(JS)的核心部分:语法、基本原理、基本对象,负责核心的语言功能;而DOM(文档对象模型)提供了访问和操作网页内容的方法和接口,BOM(浏览器对象模型)提供了与浏览器交互的方法和接口,ES加上DOM和BOM就是JS。

今天写了个粗略鉴别ES版本的代码。

EDIT:此程序只是粗略鉴别,毕竟浏览器可能会提前实现新的语法。

/**
 * 检测ECMAScript版本
 * 
 * @returns {Number}
 * 3 - ES3 或更旧
 * 5 - ES5
 * 6 - ES6 (ES2015)
 * 7 - ES7 (ES2016)
 * 8 - ES8 (ES2017)
 * 9 - ES9 (ES2018)
 * 10 - ES10 (ES2019)
 * 11 - ES11 (ES2020)
 * 12 - ES2021 或更新
 */
function detectESVersion () {
    var version = 3;
    try {
        new Function("/ /");
        version = 5;
        new Function("_=>0");
        version = 6;
        new Function("0**1");
        version = 7;
        new Function("(a,)=>0");
        version = 8;
        new Function("(...a)=>[...a]");
        version = 9;
        new Function("try { } catch { }");
        version = 10;
        new Function("0n");
        version = 11;
        new Function("class T { #p }");
        version = 12;
    }
    catch (err) { }
    return version;
}

附:ES简要更新记录

版本 内容
ES3 添加正则表达式,添加try/catch
ES5 添加严格模式,添加内置对象JSON,添加String.prototype.trim,添加Array.prototype.isArray,添加数组遍历方法
ES6 (ES2015) 添加letconst语句,支持函数参数默认值,添加Array.prototype.find
ES7 (ES2016) 添加乘方运算符**,添加Array.prototype.includes
ES8 (ES2017) 添加字符串填充到指定长度方法,引入Promise,引入共享内存
ES9 (ES2018) 添加剩余和展开元素,添加异步迭代器,添加Promise.prototype.finally,完善正则表达式的功能
ES10 (ES2019) 添加Object.fromEntries,添加字符串方法trimStarttrimEnd,添加数组扁平化方法,添加Symbol.prototype.descriptioncatch后可以没有圆括号
ES11 (ES2020) 添加importexport语句,添加bigint数据类型,添加RegExp.prototype.matchAll,添加globalThis,添加Promise.allSettled,添加??运算符,添加?.操作符
ES2021 计划添加:String.prototype.replaceAll,类的私有成员,弱对象引用,Promise.any

评论区

加载基于 GitHub issues 的 utteranc.es 评论区组件……