显然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;
}
}
});
}
它甚至超过了字符串检查!
答案 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
。