Comment détecter HTMLCollection / NodeList en JavaScript?

Je ne suis pas sûr que mon actuel de la mise en œuvre est disponible tout le temps:

function isNodeList(nodes) {
    var result = Object.prototype.toString.call(nodes);
    //modern browser such as IE9 /firefox /chrome etc.
    if (result === '[object HTMLCollection]' || result === '[object NodeList]') {
        return true;
    }
    //ie 6/7/8
    if (typeof(nodes) != 'object') {
        return false;
    }
    //detect length and item 
    if (!('length' in nodes) || !('item' in nodes)) {
        return false;
    }
    //use the trick NodeList(index),all browsers support
    try {
        if (nodes(0) === null || (nodes(0) && nodes(0).tagName)) return true;
    }
    catch (e) {
        return false;
    }
    return false;
}

Une situation commune est {longueur:1,item type:function(){return [];}}
La valeur de résultat dans google chrome /safari /opera est '[objet NodeList]'.
Dans firefox et IE 9 , c'est - '[objet HTMLCollection]'.

Qui est la valeur standard?

source d'informationauteur simon xu