两个对象的平等

You*_*sam 2 html javascript dom

对象是相等的参考没有值.

var obj1 = {name: 'Yousef', age: 15},

    obj2 = {name: 'Yousef', age: 15};

console.log(obj1 === obj2); // The Result will be false
Run Code Online (Sandbox Code Playgroud)

但是,此规则似乎不适用于DOM对象:

var div1 = document.querySelector('div'),

    div2 = document.querySelector('div');

console.log(div1 === div2); // The Result will be True!
Run Code Online (Sandbox Code Playgroud)

有谁能解释为什么?

T.J*_*der 5

您的第一个示例是比较两个单独的对象.您的DOM示例是将一个对象与自身进行比较.querySelector如果没有创建对象,它会返回对DOM树中已存在的对象的引用.

与您的DOM示例相同的是:

function findElement(element, tag) {
    for (var n = 0; n < element.children.length; ++n) {
        var child = element.children[n];
        if (child.tag === tag) {
            return child;
        }
    }
    return null;
}

var tree = {
    children: [
        {
            tag: "child",
            name: "I'm the child element",
            children: []
        }
    ]
};

var obj1 = findElement(tree, "child");
var obj2 = findElement(tree, "child");
console.log(obj1 === obj2); // true
Run Code Online (Sandbox Code Playgroud)