Javascript 为什么此Array.length if else检查不起作用?

Javascript 为什么此Array.length if else检查不起作用?,javascript,arrays,if-statement,Javascript,Arrays,If Statement,显然,tagObjects是一个数组,长度为0。然而,它仍在通过检查并导致错误 TypeError:无法读取未定义的属性“length” 它甚至通过了字符串检查 这是一种病态 if (tagObjects != "empty" || tagObjects.length === 0) { 如果字符串不是空的或没有长度,请继续 换句话说,如果数组不是空字符串,长度并不重要,如果数组是空字符串,长度可能总是空的 此外,您正在访问tagObjects.tags,这表明它既不是字符串也不是数组,而是对象

显然,tagObjects是一个数组,长度为0。然而,它仍在通过检查并导致错误

TypeError:无法读取未定义的属性“length”

它甚至通过了字符串检查

这是一种病态

if (tagObjects != "empty" || tagObjects.length === 0) {
如果字符串不是空的或没有长度,请继续

换句话说,如果数组不是空字符串,长度并不重要,如果数组是空字符串,长度可能总是空的

此外,您正在访问tagObjects.tags,这表明它既不是字符串也不是数组,而是对象,并且对象没有长度

换句话说,你的if条件毫无意义

if (tagObjects != "empty" && tagObjects.length === 0) {
您正在确保tagObjects存在,但它没有第二行使用的tagObjects.tags属性。这可能就是错误的来源

您应该更改初始条件以使用以下内容:

if (tagObjects !== 'empty' && tagObjects.tags && tagObjects.tags.length > 0) {
这也会将字符串比较更改为严格标记对象必须是精确的空字符串而不受强制,并且条件from或任何一个必须为true,且所有必须为true


结果是一个条件,检查以确保tagObjects不是字符串“空”,并且具有长度大于0的已定义属性标记。

我相信是tagObjects.tags.length导致了问题,谢谢+1现在我需要解决另一个问题hehe,tagsObjects[I]。标记看起来我需要另一个for循环来分离标记。@LeonGaban-你不能迭代tagObjects.tags然后访问tagObjects[I],它只是没有任何意义啊,制作另一个数组来分离标记,然后执行此检查。感谢您帮助解决第一个问题。
if (tagObjects !== 'empty' && tagObjects.tags && tagObjects.tags.length > 0) {