JavaScript/JSX中if语句判断对象长度不生效,控制台无打印如何解决?
JS普通对象判断逻辑差异原因说明
核心前提
你声明的data是普通JavaScript对象,不是数组、字符串或类数组结构,默认不存在内置的length属性。
不生效代码逻辑解析
var data = {"_id": "615fc3db8b6a6311aa3295ca", "isComplete": false, "remindTime": {"date": "2021-10-08", "time": "12:08:40 am"}, "subtitle": "Fdfdff", "title": "Dfdf"} if (data.length > 0) { console.log('my data', data); }
- 上述代码中
data.length取值为undefined,在JS大小比较规则中,undefined会先转换为NaN,NaN和任何数值做比较结果都为false,因此if条件不触发,代码块不执行。 - 如果你需要判断普通对象是否非空,正确写法为
if (Object.keys(data).length > 0),该方法会先获取对象所有可枚举键组成的数组,再通过数组的length属性判断长度。
正常运行代码逻辑解析
var data = {"_id": "615fc3db8b6a6311aa3295ca", "isComplete": false, "remindTime": {"date": "2021-10-08", "time": "12:08:40 am"}, "subtitle": "Fdfdff", "title": "Dfdf"} if (data.title) { console.log('my data', data); }
- 上述代码判断条件为
data.title,你定义的data对象中存在title属性,且值为非空字符串"Dfdf"。JS隐式类型转换规则中,非空字符串的布尔值为true,因此if条件触发,代码块正常执行。
内容的提问来源于stack exchange,提问作者Jerry Seigle
相关产品推荐
相关产品推荐

