Javascript Object.fromEntries仅在iOS上可用?(反应本机-非WEB) 标题是很自我解释的,但是,还是考虑这个示例代码: import * as React from 'react'; import { Text, View, StyleSheet } from 'react-native'; import { Constants } from 'expo'; export default class App extends React.Component { render() { return ( <Text> {Object.fromEntries("test")} </Text> ); } } import*as React from'React'; 从“react native”导入{Text,View,StyleSheet}; 从“expo”导入{Constants}; 导出默认类App扩展React.Component{ render(){ 报税表( {Object.fromEntries(“test”)} ); } }

Javascript Object.fromEntries仅在iOS上可用?(反应本机-非WEB) 标题是很自我解释的,但是,还是考虑这个示例代码: import * as React from 'react'; import { Text, View, StyleSheet } from 'react-native'; import { Constants } from 'expo'; export default class App extends React.Component { render() { return ( <Text> {Object.fromEntries("test")} </Text> ); } } import*as React from'React'; 从“react native”导入{Text,View,StyleSheet}; 从“expo”导入{Constants}; 导出默认类App扩展React.Component{ render(){ 报税表( {Object.fromEntries(“test”)} ); } },javascript,react-native,object,ecmascript-6,expo,Javascript,React Native,Object,Ecmascript 6,Expo,请在 通过在Android设备上打开它,我得到的错误是对象上不存在fromEntries函数: 但在iOS上,它确实存在: (提供给它的参数不正确,但它仍然存在) 那么这里发生了什么?这两个平台之间的JS引擎不是应该相同吗?还有哪些类似的已知差异存在?最有可能的情况是您有一台旧的或未完全支持的发动机(请检查)。您可以这样制作ES6 polyfill: Object.fromEntries = Object.fromEntries || arr => arr.reduce((acc, [

请在

通过在Android设备上打开它,我得到的错误是
对象上不存在
fromEntries
函数:

但在iOS上,它确实存在:

(提供给它的参数不正确,但它仍然存在)


那么这里发生了什么?这两个平台之间的JS引擎不是应该相同吗?还有哪些类似的已知差异存在?

最有可能的情况是您有一台旧的或未完全支持的发动机(请检查)。您可以这样制作ES6 polyfill:

Object.fromEntries = Object.fromEntries || arr => arr.reduce((acc, [k, v]) => (acc[k] = v, acc), {});
Object.fromEntries = Object.fromEntries || function(arr) {
    return arr.reduce(function(acc, curr) {
        acc[curr[0]] = curr[1];
        return acc;
    }, {});
};
或者像这样的ES5聚填料:

Object.fromEntries = Object.fromEntries || arr => arr.reduce((acc, [k, v]) => (acc[k] = v, acc), {});
Object.fromEntries = Object.fromEntries || function(arr) {
    return arr.reduce(function(acc, curr) {
        acc[curr[0]] = curr[1];
        return acc;
    }, {});
};
大多数浏览器和Javascript引擎还不支持诸如,
Object.fromEntries
,以及一些新的函数。这意味着我们可能会在android或iOS Javascript引擎的下一次更新中看到它受到支持


只需将babel预设添加到您的babel配置:

仅仅添加浏览器是完全不同的。他们都有不同的JS引擎、渲染引擎等。他们都有自己的优先权来实现规范,在他们首选的规范版本上有自己的日程安排。这是一个很好的浏览器兼容性资源。检查官方规范兼容的polyfill:这取决于特定操作系统中使用的javascript引擎,一些较新的Android版本支持这一点,一些则不支持。这个问题是关于反作用本地人的,什么浏览器?什么Android版本?该引擎随应用程序一起提供。为什么要将值赋给
对象。fromEntries
?它从文档中获取键值对并将其转换为对象。@tenpeter它是一个多边形填充-如果它不存在,那么您可以使用这个。等等,我会修改我的答案。我是说。。我知道这是可以解决的。。。但是为什么是这样?“我”怎么可能有一个旧的或不受支持的引擎?我只是在用RN。老实说,我不知道@iuliu.net,但是试着实现上面的polyfills,看看你是怎么做的。再次感谢你对“如何解决这个问题”的解答,但我的问题不是“如何解决这个问题”,而是“为什么会这样?”。我想知道这是否是我可以预料到的事情,并且在将来必须加以防范,或者只是一个RN bug。尽管如此,我还是很感激你的回答。再一次,问题是关于。。。不是浏览器。我给你一个当前支持的例子,你可以从那里看到,react-native引擎和许多浏览器目前都不支持它。我在回答中说,大多数浏览器和Javascript引擎都不支持它。“从那里你可以看到,react-native不支持它。”。如果您阅读了我的问题,您会注意到react native支持它,但仅在iOS上支持。React Native应该在同一个引擎上运行,而不考虑平台,因此我感到困惑。但我认为你混淆了web应用程序,它们运行在任何可用的引擎上,而React Native则应该运行在任何平台的同一个引擎上,以确保一致性。