gpt4 book ai didi

javascript - 有没有办法检查Javascript函数返回对象/数组是否为空?

转载 作者:行者123 更新时间:2023-11-28 16:56:42 27 4
gpt4 key购买 nike

我在这里想要实现的是,我创建了一个简单的实用函数,它应该根据 isEmpty 方法的给定参数返回“true”或“false”。

//下面的日志应该返回“false”,但它返回“true”

console.log(isEmpty( () => {key: 1} )); 

到目前为止我尝试过的内容

 function isEmpty(value) {
const type = typeof value;
if ((value !== null && type === 'object') || type === 'function') {
const properties = Object.keys(value);
return properties.length === 0 || properties.size === 0
}
return !value;
}

它适用于以下情况

        console.log(isEmpty( {} )) // true
console.log(isEmpty( [] )) // true
console.log(isEmpty( Object.create(null) )) // true
console.log(isEmpty( null )) // true
console.log(isEmpty( '' )) // true

console.log(isEmpty( {key: 1} )) // false
console.log(isEmpty( [1,2,3] )) // false

但是当我们从函数中获取返回对象/数组时,它不起作用

    console.log(isEmpty( () => ({key: 1}) )) 
console.log(isEmpty( () => ([1,2,3]) ))

最佳答案

在函数上使用Object.keys()将始终导致空数组(无论返回类型如何)。这是因为函数的键不可枚举(键是 namelength),并且 Object.keys() 只会返回可以枚举的键。这意味着键数组的长度将始终为 0,这意味着即使传递的函数返回非空值,您的函数也会返回 true

如果您可以调用(如果它是一个函数),它将允许您从中获取返回值(即:一个对象或数组),然后使用您的递归您当前拥有的功能:

function isEmpty(value) {
const type = typeof value;
if (value !== null && type === 'object') {
const prototype = Object.getPrototypeOf(value) || {};
const properties = Object.keys(value) + Object.keys(prototype);
return properties.length === 0 || properties.size === 0
} else if(type === 'function') {
const res = value();
return isEmpty(res);
}
return !value;
}

console.log(isEmpty( {} )) // true
console.log(isEmpty( [] )) // true
console.log(isEmpty( Object.create(null) )) // true
console.log(isEmpty( null )) // true
console.log(isEmpty( '' )) // true

console.log(isEmpty(() => ({}))); // true
console.log(isEmpty(() => () => () => ({}))); // true

console.log(isEmpty( {key: 1} )) // false
console.log(isEmpty( [1,2,3] )) // false

console.log(isEmpty(() => ({key: 1}))); // false
console.log(isEmpty( () => ([1,2,3]) )) // false


console.log(isEmpty(() => (Object.create({key: 1})))) // false

关于javascript - 有没有办法检查Javascript函数返回对象/数组是否为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58947912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com