1. 程式人生 > >JavaScript 中的物件包含同樣的屬性及相同的值,它們是相等的嗎?

JavaScript 中的物件包含同樣的屬性及相同的值,它們是相等的嗎?

    當然不是相等的。

    原因:物件的比較並非值得比較:即使兩個物件包含同樣的屬性及相同的值,它們也是不相等的各個索引元素完全相同的兩個陣列也不相等。

         var o = {x:1},p = {x:1}; //具有相同屬性的兩個物件

         o === p // => false:兩個單獨的物件永不相等

         var a = [],b = []; //兩個單獨的空陣列

         a === b; // => false:兩個單獨的陣列永不相等

    我們通常將物件稱為引用型別(引用型別),以此來和JavaScript的基本型別區分開來。依照術語的叫法,物件值都是引用(reference),物件的比較均為引用的比較:當且僅當它們引用同一個基物件時,它們才相等。

        var a = []; //定義一個引用空陣列的變數一

        var b = a; //變數b引用同一個陣列

        b [0] = 1; //通過變數b修改引用的陣列

         a [0]; // => 1變數a也會修改

         a === b; // => true; a和b引用同一個陣列,因此它們相等

    這段程式碼第二行只是把陣列(或物件)賦值給一個變數,僅僅是賦值的引用值:物件本身並沒有複製一次如果想要一個物件或者陣列的副本,則必須顯式複製物件的每個屬性或陣列的每個元素。

         var a = {'a','b','c','d'};

         var b = {};

         for(var i = 0; i <a.length; i ++){
                 b [i] = a [i];

          }

所以我們怎麼比較兩個單獨的物件那個或者陣列呢?

        。根據上一段程式碼的演示,我們可以想到同樣的方法,通過比較它們的屬性或者元素,來比較物件或陣列請看下面比較兩個陣列的函式:

        function equalArrays(a,b){
                if(a.length!= b.length)return false; //兩個長度不同的陣列不相等

                 for(var i = 0; i <a.length; i ++)              

                             if(a [i]!== b [i])返回false; //如果有任意元素不相等,則陣列不相等

                  返回true; //否則它們相等
        }

 

注:本文章有部分內容摘自書“JavaScript的權威指南第6版”

如果有錯誤的地方還請留言,大家一起討論一下,謝謝!