2017-09-19 16 views
1

Node.jsの2つのDOMを比較する非常に基本的な機能を構築しています。違いを検出するだけでなく、正確な違いを特定するつもりです。驚くべきことに、2つの同等のDOM(jsdomを使用して再構築)を使用すると、ノードのchildNodesを比較するとchildNodesを使用するとfalseが返され、innerHTMLを使用するとtrueが返されます。私の目的のために2つの等しいノードを比較すると、childNodesはfalseを返します。innerHTMLと比較するとtrueが返されます。なぜですか?

const checkForUpdates = function(website) { 

    let oldDom = new JSDOM(website.storedPage.page); 
    oldDom = oldDom.window.document.querySelector('body'); 

    let newDom = new JSDOM(website.newPage.page); 
    newDom = newDom.window.document.querySelector('body'); 

    const startChecking1 = function(someDom, anotherDom) { 
    return someDom.childNodes === anotherDom.childNodes; 
    // This returns false 
    }; 

    const startChecking2 = function(someDom, anotherDom) { 
    return someDom.innerHTML === anotherDom.innerHTML; 
    // This returns true 
    }; 

    console.log(startChecking(oldDom, newDom)); 

}; 

、のchildNodesを使用して厳密には必要ではないが、おそらくそれは、条件文のこのタイプのために意図されていないが、私はまだこれらのDOMのであれば、それはtrueを返すだろうと驚いていますまったく同じ。私が '==='の代わりに '=='を使用しても、私は偽になります。

ありがとうございました!

+1

同じ理由で '[1,2]!== [1,2]' 'が、[1,2] .toString()=== [1,2] .toString()'。 –

答えて

5

.innerHTMLを呼び出すと、基本的な文字列照合であるシリアル化されたコンテンツが返されます。

比較しようとすると、.childNodesは、javascriptで直線比較ではないオブジェクトを比較しようとしています。

Object comparison in JavaScript

関連する問題