携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第23天,点击查看活动详情
大家好!我是前端爬楼工程师🚹,一个野生程序员。好奇新技术,仰慕牛大佬。如果喜欢我的文章,可以关注➕点赞,为我注入能量,与我一同成长吧~
命名
JavaScript标准的官方名称是“ECMAScript”(简称ES)。一般情况下是用有序的数字标识版本的,例如“5”表示第五版。
最早的版本是ES1和ES2,他们不为人知,实现也很少。第一个流行起来的版本是ES3,它成为IE6-8和早前旧版Android2.x移动浏览器的JavaScript标准。某些政治原因,ES4没有成型。
ES5在2009年正式发布,在当代浏览器的进化和爆发中成为JavaScript广泛使用的标准。
下一个JavaScript版本是ES6,在规范发展后期有人建议用年份作为版本来标识,比如ES2016(ES7),但后来保持统治地位的还是ES6.版本还是其次,最重要的是它支持哪些新特性。
transpiling
JavaScript的新特性出现,让开发者遇到了旧版浏览器不支持的情况。所以需要将ES6+的代码进行转换+编译transform + compliling。简单言之,就是用专门的工具将ES6+的代码转换为等价的可以在ES5环境下工作的代码。
transpiling针对的是语法。
var foo = [1,2,3]
var obj = {foo} // 短路属性
obj.foo
转换后的代码
var foo = [1,2,3]
var obj = {foo: foo}
obj.foo
shim/polyfill
polyfill/shim通常针对的是API来说的
通常有些API在旧的浏览器上不支持,polyfill做的事情就是定义一些代码,让不支持新API的旧浏览器能实现等价效果。
if(!Object.is){
Object.is = function(v1, v2){
// 检查-0
if(v1 === 0&& v2 === 0){
return 1/v1 === 1/v2
}
// 检查NaN
if(v1 !== v2 ){
return v1 !== v2
}
return v1 === v2
}
}
上面这段代码就是polyfill, if的作用就是只定义在未定义API的旧环境行为;需要覆盖已存在的API的情况是非常罕见的。
结语:关于ES的发展,转换编译新语法支持旧版浏览器,增加polyfill实现了具有和新API的等价效果等介绍就到此结束了。