繁体   English   中英

对于给出 TypeError 的空对象:无法将 undefined 或 null 转换为对象

[英]For empty object giving the TypeError: Cannot convert undefined or null to object

好吧,我知道这将是一个非常常见的问题,但我试图找到解决方案但还没有运气。 所以这里是问题陈述:

由于某些条件,我的对象没有值并且它是空的{}并且当我尝试使用Object.keys(ambassador).length OR Object.entries(ambassador).length检查此对象的长度时,它给了我错误

类型错误:无法将 undefined 或 null 转换为对象。

代码示例:

const ambassador = Array.isArray(ambassadors) 
        ? ambassadors.find((item) => {
                return item.affiliate_id === affiliate.tracking_id;
            })
        : {};

console.log(ambassador == null); //false
console.log(typeof(ambassador)); // Object
console.log(Object.keys(ambassador).length > 0 ); //TypeError: Cannot convert undefined or null to object.

所以,我从 Kireeti Ganisetti 的评论中得到了解决方案,他建议使用 LOADASH 并且它有效:)

在 Javascript 中检查对象是否为空 - React:

import _ from 'lodash';
_.isEmpty(ambassador)

正如 mdn 所说

值 null 表示有意缺少任何对象值。 它是 JavaScript 的原始值之一,对于布尔运算被视为假

在读取键之前尝试检查您的对象是否为null

let ambassador = null;
console.log(ambassador == null); //false
console.log(typeof(ambassador)); // Object
if (ambassador)
    console.log(Object.keys(ambassador).length > 0 );

一个例子:

 let ambassador = null; console.log(ambassador == null); //false console.log(typeof(ambassador)); // Object if (ambassador) console.log(Object.keys(ambassador).length > 0 );

更新:

如果let ambassador = {}; 那么abmassadortruthy所以你可以检查对象的键:

let ambassador = {};
console.log(ambassador == null); //false
console.log(typeof(ambassador)); // Object
if (ambassador)
    console.log(`ambassador`, Object.keys(ambassador).length > 0 );

正如 mdn 所说

在 JavaScript 中,真值是在布尔上下文中遇到时被认为是真的值。 所有值都是真值,除非它们被定义为假(即,假、0、0n、""、null、未定义和 NaN 除外)。

JavaScript 中的真值示例(在布尔上下文中将被强制为真,从而执行 if 块):

if (true)
if ({})
if ([])
if (42)
if ("0")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM