为什么这个Array.length if else检查不起作用?

时间:2015-04-30 16:10:35

标签: javascript arrays if-statement

enter image description here

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

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

if (tagObjects != "empty" || tagObjects.length === 0) {
    for (var i = 0; i < tagObjects.tags.length; i++) {
        temp_tags.push(tagObjects[i].tags);
    }

    temp_tags.forEach(function(obj) {
        if (obj.selected) {
            if (vs.tags[map[obj.term]] != undefined) {
                vs.tags[map[obj.term]].selected = true;
            }
        }
    });
}

它甚至超过了字符串检查!

enter image description here

2 个答案:

答案 0 :(得分:7)

这是一个OR条件

if (tagObjects != "empty" || tagObjects.length === 0) {

如果它不是字符串"empty" ,如果它没有长度,请继续。

换句话说,如果数组不是字符串"empty",则长度无关紧要,如果它是一个数组,它可能总是如此?

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

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

if (tagObjects != "empty" && tagObjects.length === 0) {

答案 1 :(得分:2)

您确定HTTP 301 Permanent Redirect存在,但它没有tagObjects属性(您在第二行使用)。这可能是错误的来源。

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

tagObjects.tags

这也将字符串比较更改为严格(if (tagObjects !== 'empty' && tagObjects.tags && tagObjects.tags.length > 0) { 必须是没有强制的确切字符串tagObjects)和条件从OR(任何一个必须为真)到AND(所有必须为true) )。

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