javascript typeof item ===“undefined”永远不会返回true

时间:2011-08-16 05:26:10

标签: javascript

在下面的代码示例中,typeof item ===“undefined”永远不会返回true。我试图从XML获取一个属性,如果该属性不存在于XML中它返回“未定义”,但我无法捕获它是否返回未定义,firebug将“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),代码现在按预期工作

编辑2:仔细检查它,项目变量永远不为空,它是“未定义”

6 个答案:

答案 0 :(得分:3)

getAttribute返回一个对象(有效对象或空对象)。因此,检查(typeof item === "undefined")不正确。它应该是(item === null)

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

试试这个:

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

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

答案 5 :(得分:0)

getAttribute:返回类型object


您应该将返回值与null

进行比较