繁体   English   中英

javascript typeof item === “undefined” 从不返回 true

[英]javascript typeof item === “undefined” never returns true

在以下代码示例中,typeof item === "undefined" 永远不会返回 true。 我正在尝试从 XML 获取属性,如果 XML 中不存在该属性,它将返回“未定义”,但我无法捕获它是否返回未定义,萤火虫将“typeof item”显示为“对象” "

var item;
var itemIDs = {};
if (items.status == 200)
{   
    var rows = items.responseXML.getElementsByTagName('z:row');
    for(i=0;i<rows.length;i++)
    { 
        //rows[i].attr(attribute);
        item = rows[i].getAttribute(attribute);
        if(typeof item === "undefined")
        {
            continue;

        }
        else
        {
            item = item.match(/[^\d+;#][\w\W]+/);
            itemIDs[item] = 1 ;
        }

    }
}
else
{
     alert('There was an error: ' + items.statusText);
}

return itemIDs;

编辑:我将条件更改为 if(item == undefined),代码现在按预期工作

Edit2:仔细检查,项目变量从来不是 null,它是“未定义”

getAttribute 返回 object(有效的 object 或 null 对象)。 所以检查(typeof item === "undefined")不正确。 它应该是(item === null)

如果属性不存在,某些浏览器的getAttribute实现可能会返回一个空字符串。 您可以同时测试 null 和"" ,或者使用hasAttribute

if(rows[i].hasAttribute(attribute))
{
    // do stuff...
}

https://developer.mozilla.org/en/DOM/element.getAttribute

这是因为typeof null === 'object' (与常识相反)。 您应该检查getAttrbiute的返回值是否等于null

item = rows[i].getAttribute(attribute);
if (item == null) { /* ... */ }

typeof null"object" ......这是 getAttribute 似乎在缺少属性时返回的内容。 请参阅element.getAttribute的文档,特别是注释部分。 建议您可以使用hasAttribute

尝试这个:

if (!item)
{
    continue;
}
else
{
    item = item.match(/[^\d+;#][\w\W]+/);
    itemIDs[item] = 1 ;
}

这证明该项目是 null 还是未定义。 这是真的吗,它继续循环。

getAttribute : 返回类型object


您应该将返回值与null进行比较

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM