当然,我们所有人都知道强大的JavaScript
引擎,所以为什么在React Native
中使用另一个名称为JavaScriptCore
的引擎。
JavaScriptCore不支持某些ES6
功能,例如以下功能:
Array.prototype.flatten
JavaScriptCore对V8有什么好处?为什么Facebook开发人员不使用V8?
答案 0 :(得分:3)
V8无法在iOS上运行,因为Apple不允许第三方应用程序在运行时(也称为“ JIT编译”)生成代码,而V8在很大程度上依赖该代码来提高性能(*)。由Apple生产的JavaScriptCore允许在iOS上运行(和JIT编译代码)。由于React Native的目的是跨平台开发,因此这是一个有力的论据。
也就是说,Array.prototype.flatten
不是ES6功能。当前它是一个“ stage 3 proposal”,这意味着它可能很快就会成为JavaScript的正式组成部分-大概是ES2019(旧命名方案中为“ ES10”)。此外,由于Web兼容性问题,名称为Array.prototype.flat
,它已重命名为.flatten
。 JavaScript引擎已经开始实现它;根据{{3}}的说法,最新版本的Safari / JavaScriptCore已经支持了它,因此,在React Native中获得支持也可能只是时间问题。
(*)有一个MDN用于构建V8版本,该版本避免了所有运行时代码的生成,尽管可以在任何地方运行都牺牲了很多性能,但是尚不可用。