ES9(也就是 ECMAScript 2018)引入了许多新的特性,其中一个非常有用的方法是 Object.values(),它可以返回对象的所有属性值组成的数组。但是,这个方法并不是所有浏览器都支持的,因此在写跨浏览器的代码时需要考虑到这个兼容性问题。本文将介绍如何解决 ES9 中 Object.values() 的兼容性问题。
解决方案
为了解决 ES9 中 Object.values() 的兼容性问题,我们需要先检测当前的环境是否支持这个方法。如果不支持,我们需要手动实现一个类似的函数。下面是一个基于 polyfill 的实现:
-- -------------------- ---- ------- -- ---------------- - ------------- - ------------- - -- ---- --- ------------ - ----- --- ------------------------ ------ -- - ------------- - --- ---- - --- --- ---- --- -- ---- - -- ------------------------------------------ ----- - -------------------- - - ------ ----- - -
这个实现检测了是否已经定义了 Object.values(),如果没有就定义一个新的函数。这个函数首先检查传入的对象是否是一个对象,如果不是就抛出一个类型错误。然后遍历对象的属性,将属性的值添加到一个数组中,最后返回这个数组。
示例代码
下面是一个使用 Object.values() 的示例代码:
const obj = { a: 1, b: 2, c: 3 }; const values = Object.values(obj); console.log(values); // [1, 2, 3]
如果运行上面的代码在浏览器控制台中输出了 [1, 2, 3],那么你的浏览器已经支持了 ES9 中的 Object.values() 方法。如果输出 undefined,说明你需要使用 polyfill 来实现这个方法。
总结
ES9 中引入了 Object.values() 方法来方便地获取对象的属性值组成的数组。但是,由于这个方法并不是所有浏览器都支持的,我们需要使用 polyfill 来实现这个方法。虽然这个问题看起来很小,但是在编写跨浏览器的代码时必须要考虑到,这可以提高你代码的稳定性和可用性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/645a273f968c7c53b0c49b5b