You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

判断嵌套对象属性是否有值的函数对Date类型失效的原因与解决

问题分析与解决:修复能识别Date类型的hasValue函数

问题原因

原函数处理Date类型失效的核心逻辑问题:

  • typeof new Date()返回值是"object",会触发递归调用hasValue(value)遍历Date对象的属性
  • 但Date实例的自身可枚举属性默认是空的(for...in循环找不到任何属于Date自身的属性),递归遍历Date时直接返回false,导致整个函数错误判定该Date为“无有效值”

解决方法

修改思路:在递归处理对象类型的值前,先做两个关键判断:

  1. 排除null(因为typeof null也等于"object",但null不属于有效值)
  2. 如果是Date实例,直接认定为有有效值,返回true

修改后的代码如下:

function hasValue(obj) {
    for (const key in obj) {
        if (obj.hasOwnProperty(key)) {
            const value = obj[key];
            if (typeof value === "object") {
                // 过滤null,避免递归报错
                if (value === null) {
                    continue;
                }
                // 识别Date实例,直接返回true
                if (value instanceof Date) {
                    return true;
                }
                // 递归处理其他对象/数组
                if (hasValue(value)) {
                    return true;
                }
            } else if (value) {
                return true;
            }
        }
    }
    return false;
}

验证测试

用你提供的model对象测试:

const model = {
    criteria: "",
    category: "",
    range: {
        start: { a: [new Date()] },
        end: new Date(),
    },
};
console.log(hasValue(model)); // 输出true,符合预期

内容的提问来源于stack exchange,提问作者Mario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:50:22