2017-01-12 101 views
1

對不起,如果之前已經詢問過,但是我無法從我的搜索中找到它。在開發模式觀察 火狐50.1.0 的Chrome 55.0.2883.87單參數與多參數時Javascript函數的奇怪參數值

**

輸出,也許這是我做錯了,但不要只是看的console.log在開發者模式,而且點擊對象的細節對於具體的console.log調用

我對面,學習先進的JavaScript的代碼來了,我加了一些的console.log呼籲更好地理解它。但是,我的console.log調用的輸出對我來說沒有意義。

我期待的console.log的輸出(「P00,...)調用是相同的,但根據第一輸出是否是不同的‘迴歸根本’的評論或沒有。

當第一個「return root」沒有被註釋時,console.log(「p00,...)顯示一個具有單個屬性的對象 - 它是」name「。這是我所期望的,對我來說很有意義。

當第一個「返回根」被註釋時,console.log(「p00,...)顯示一個包含兩個屬性的對象 - 它們是」名稱「和」城市「 這是爲什麼發生在這裏??

下面是Javascript代碼:

function merge(root){ 
    console.log("p00, root is ", root); 
    console.log("p01, arg length is ", arguments.length); 
    console.log("p02, arg is ", arguments); 


    // comment out this return call and see the difference 
    return root; 


    for (var i = 1; i < arguments.length; i++) { 
     for (var key in arguments[i]) { 
      root[key] = arguments[i][key]; 
     } 
    } 

    return root; 
} 

var v1 = {name: "John"}; 
var v2 = {city: "Boston"}; 
var merged = merge(v1, v2); 
console.log("p03, merged is ", merged); 

在Firefox觀測的輸出:

第一返回根uncommente d first return root uncommented

第一回根評論 first return root commented

+0

您的圖片顯示的說法,根本是在第一的console.log的*同*無論哪種方式。只有* last * console.log隨着// return而改變 - 它會分別顯示未改變或合併的結果,這就是你在右側看到的結果。 – sweaver2112

+0

非常感謝@ sweaver2112和Mike C. – gnemnk

+1

這是我對Firefox和Chrome顯示輸出的誤解。 結論 - 對於console.log(「p00 ...)」,輸出對於兩種情況都是相同的,但控制檯提供對該對象的引用,因此當您嘗試查看更多詳細信息時它將顯示對象的最終狀態關於該對象,JSON.stringify是查看對象快照的絕佳建議。 – gnemnk

回答

0

控制檯提供了參考給你註銷的對象。這意味着在你的功能已經完成運行後,你會看到對象的狀態。

如果您想查看對象狀態的快照,可以嘗試將其轉換爲JSON。

// Be sure to open your real console for this 
 
function reference(obj) { 
 
    console.log(obj); 
 
    obj.b = 2; 
 
} 
 

 
function json(obj) { 
 
    console.log(JSON.stringify(obj)); 
 
    obj.b = 2; 
 
} 
 

 
reference({ a: 1 }); 
 
json({ a: 1 });