一、前言
在项目开发完成后,进行版本测试过程中,更换了浏览器,遇到Uncaught(in promise)TypeError:0bject.hasOwn is not a function
报错
控制台:
报错定位:
二、原因
报错由该项目中使用的react-markdown
插件导致,hasOwn是es2022新语法,旧浏览器不支持。
三、解决
提案方法 Object.hasOwn
与 Object.prototype.hasOwnProperty.call(object, property)
具有相同的行为。
方案一:
直接修改react-markdown
插件中的源码,相当于去修改了node_modules
模块,你下次再npm i
时还是会被重新覆盖的,当然也可以去搜索如何优雅的修改node_modules
中的代码而不被覆盖。但此方案,治标不治本。
方案二:
polyfill 支持
在不支持的浏览器中,我们需要使用一些回退方式。我们利用 Object.hasOwn
与 Object.prototype.hasOwnProperty.call(object, property)
的相同行为实现支持方案:
if (!Object.hasOwn) {
Object.defineProperty