如何看待Chrome对ES6的支持只有65%,比Firefox还低
答案:2 悬赏:30
解决时间 2021-12-14 08:47
- 提问者网友:相思瘸子
- 2021-12-14 04:32
如何看待Chrome对ES6的支持只有65%,比Firefox还低
最佳答案
- 二级知识专家网友:一池湖水
- 2021-12-14 05:36
每个浏览器开发重点,侧重的方向不一样,这很正常。FireFox在对ES6的支持上一直都比Chrome浏览器要领先,主要是因为,ES6的很大推动力来自于FF那帮JS元老
全部回答
- 1楼网友:啵啵桃汀
- 2021-12-14 06:06
首先要指出的就是firefox在对es6的支持上一直都比chrome浏览器要领先,主要是因为,es6的很大推动力来自于ff那帮js元老(包括js之父brendan eich等)
当年es4难产,主要就是因为ff帮那边的人对语法改动太过激进,导致在es4标准制定的时候冲突不断,所以最后才给下一代es定了个harmony(和谐)的代号。
firefox在es规范之前就已经做了很多私有的语法制定,比如说迭代器,现在可以给对象指定个symbol.iterator的key来实现一个迭代器,而ff很早就已经实现了形如obj["@@iterator"]=function(){}的迭代器。
所以es6的标准,firefox的spidermonkey是实现最迅速的,而chrome的v8,却一直比较反复,特别是像proxy这种特性,v8在大约一年半以前临时实现过一种,用了两个版本以后,突然彻底下架,然后一年多以来,这个proxy的特性就一直没加回来,包括计划列表里都没有这玩意。
需要指出的是,题图里关于es6的支持对比,firefox丢分在于没有支持class关键字,而edge13却完整支持了es6 class的语法糖,包括super。
其实class关键字一直存在于firefox的夜间版上面,可惜的是不知道什么原因,已经过了这么长的时间了,ff也没有把class移植到正式版上面。
其他ff相比于edge13丢分的在于内置对象的子类支持,就是形如class a extends function这种,这个没的说,edge13确实是领先其他浏览器。
但ff也有edge13没有支持的一些特性,典型的比如:函数定义时的参数默认值,这种html注释js的手段等等。
更何况ff还有一个很省事的语法糖:解构,这个解构语法就是ff那帮人造出来的,所以他们实现的最早,而其他浏览器也跟进的最慢,edge13貌似现在也还未实现。
所以总体来说,这两个浏览器在特性支持上基本上在持平状态,ff如果把class从夜间版弄到正式版的话,就可以覆盖到90%了。
=================
然后再来说说chrome和chrome家的v8,由于我常用node.js,所以对v8很关注,经常去v8的官方blog上逛逛,不得不说,v8对于es6特性实现,是慢于edge和firefox,也就只能和safari家的javascript core比一比了。
首先是之前去掉后一直不加的proxy,这个proxy可以做很多魔法效果,比如说实现php那种__get__或者是ruby的method_missing,或者是实现单元测试里的mock,在很多场景上都能省事的,然后v8就是任性,开发蓝图上也对这个只字不提了。
然后是箭头函数,说来奇怪,在chrome的某一个版本上,它猛地实现了箭头函数这个特性,然后下一个版本直接取消了,随后一直到v8 3.5的时候才正式加上去,这个离其他浏览器实现箭头函数,已经差了一年时间了,node开发者很多都用coffeescript或者typescript去了……
然后是解构,至今还未实现。
然后是最近几个版本的作为:先是实现个三点号实参调用,也就是func(...arr),这个在v8 4.6的时候加入的唯一es6新特性,然后v8 4.7加入的是三点号形参定义,也就是function func(...args){}这种,然而参数定义默认值这些特性,估计不知道哪年能实现。
然而node.js绑了v8已经导致了极难替换的局面,倒不是因为语言的引擎难以替换,而是周边的大量类库难以替换,所以node这边才会有一个nan的项目,让c/c++扩展能顺应v8那种快速变更api的流氓作法,而v8的api变化很快,有时候就为了改个名字…
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯