防止 ES9 中 Object 的 entries() 函数在非可迭代对象上抛出错误
ES9 中新增的 Object 的 entries() 是一个很方便的函数,它可以将对象的键值对转化成可迭代的数组,便于我们对对象的处理和遍历。但是当我们在非可迭代的对象上使用 entries() 函数时,它会抛出错误:TypeError: Object.entries called on non-object。
这篇文章将介绍如何避免这个错误,并提供一些示例代码来帮助理解。
首先,我们需要知道 entries() 函数是在可迭代对象上定义的,如数组和 Map 对象。若我们要在非可迭代对象上使用该函数,我们可以通过以下方法进行容错处理:
1.使用第三方类库
有些第三方类库具有容错处理这种情况的方法,如 Lodash,Underscore 等,你可以使用它们里面的方法代替原生的 entries() 函数,可以确保代码在使用时不会抛出异常。示例代码如下:
const obj = {name: 'Tom', age: 18}; const entries = _.entries(obj); // => [['name', 'Tom'], ['age', 18]]
2.使用 if 判断
我们可以使用 if 判断来检查对象是否可迭代。因为如果一个对象是可迭代对象,那么它就有 Symbol.iterator 属性。
if (obj[Symbol.iterator]) { const entries = Object.entries(obj); // => [['name', 'Tom'], ['age', 18]] } else { // 对象不是可迭代对象 }
3.使用自定义的容错处理函数
我们可以定义一个容错处理函数,当对象不可迭代时返回一个自定义的值,比如 null 或空数组。
function safeEntries(obj) { if (obj[Symbol.iterator]) { return Object.entries(obj); } else { return []; } } const obj = {name: 'Tom', age: 18}; const entries = safeEntries(obj); // => [['name', 'Tom'], ['age', 18]]
总结
Object 的 entries() 函数在非可迭代对象上抛出错误是一个很常见的问题。我们可以使用第三方类库、if 判断语句或自定义容错处理函数来避免该错误。如果你的代码中可能会出现这种情况,请务必在编写代码时注意并进行容错处理。
希望本篇文章能对您有所帮助,并可以避免这种错误的产生。
参考资料
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/65b4c0b2add4f0e0ffd9d82b