Uncaught TypeError: Object.entries is not a function

前言:其实这个问题很简单,但是对于小白我来说,一开始真的不知道该怎么解决。希望能够整理遇到这种情况的思路。

我是使用react + antd写的一个系统,需求是需要兼容低版本chrome浏览器(其中有各种理由需要去做这样一个事情)。高版本系统没有问题,但是chrome 52版本页面会出现异常。

页面直接报错:

Uncaught TypeError: Object.entries is not a function

Object.entries这个方法我以前没有用过,当然这次系统也没有用到,所以先排查为什么会报错,高版本显示没有问题,低版本出现问题,可以确定的是兼容性问题,但是我本身自己没有写这样的方法在代码里面,排查页面才把问题定位到antd到Progress进度条组件上。接下来怎么解决这个问题呢。

1、首先来看看Object.entries这个是什么意思(这里有一个坑)
先看看菜鸟教程怎么解释的:点击跳转
在这里插入图片描述
因为菜鸟教程的解释是可以兼容Chrome38以上,我有点迷茫了…
2、再看看权威文档MDN:点击跳转
在这里插入图片描述所以有时候需要多看一些文档(这里就是一个坑)
剩下得就是怎么解决了这个问题了。
第一种办法:使用Polyfill
这个是babel里面的一个包点击查看详情,这个文档已经说得很详细了,其实他的原理也是,就是如果低版本或者IE不支持promise,那它就给你创建一个promise的方法。
第二种方法,
其实就是利用polyfill的原理去做,直接上代码:

    
 <script>
    const reduce = Function.bind.call(Function.call, Array.prototype.reduce);
    const isEnumerable = Function.bind.call(Function.call, Object.prototype.propertyIsEnumerable);
    const concat = Function.bind.call(Function.call, Array.prototype.concat);
    const keys = Reflect.ownKeys;
    if (!Object.entries) {
        Object.entries = function entries(O) {
            return reduce(keys(O), (e, k) => concat(e, typeof k === 'string' && isEnumerable(O, k) ? [[k, O[k]]] : []), []);
        };
    }
</script>

因为我的项目本身是使用umi搭的架子,其实也可以直接根据官方文档说明进行配置
在这里插入图片描述
都是可以实现的。

以上如有错误,欢迎批评指正

这个错误信息 "Uncaught (in promise) TypeError: Object.hasOwn is not a function" 通常出现在JavaScript代码中。让我来解释一下这个错误以及可能的解决方法: 1. 错误原因: 这个错误表明代码中尝试使用 Object.hasOwn 方法,但是这个方法在当前执行环境中并不存在。 2. 错误解释: - "Uncaught (in promise)" 表示这个错误是在一个Promise中被抛出的,但是没有被捕获。 - "TypeError" 是一种JavaScript错误类型,表示值的类型不是预期的。 - "Object.hasOwn is not a function" 明确指出 Object 对象的 hasOwn 方法不存在。 3. 解决方法: a. 如果你使用的是较旧的JavaScript环境(如ES2021之前的版本),hasOwnProperty 方法可能不可用。在这种情况下,你可以使用以下替代方法: ```javascript if (Object.prototype.hasOwnProperty.call(object, "property")) { // 你的代码 } ``` b. 如果你打算使用ES2022引入的 Object.hasOwn 方法,你需要确保你的运行环境支持ES2022或更高版本,或者使用转译器(如Babel)来转换代码。 c. 如果你使用的是现代浏览器或Node.js版本,可以考虑更新到最新的稳定版本,这些版本通常会支持最新的JavaScript特性。 d. 如果你在使用某个库或框架,查看其文档或社区讨论,看看是否有特定的解决方案或替代方法。 4. 预防措施: - 始终检查你使用的JavaScript特性的浏览器兼容性。 - 在使用新特性时,考虑使用转译器来确保向后兼容性。 - 在生产环境中,始终使用错误处理机制(如try-catch)来捕获和处理可能的错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值