2017-10-21 170 views
2

爲什麼console.log函數返回undefined?

function stringifyObj(parmObj){ 
 
    s=""; 
 
    Object.getOwnPropertyNames(parmObj).forEach 
 
    (
 
     function (val, idx, array) { 
 
      s+=val + ' -> ' + parmObj[val]+"\n"; 
 
     } 
 
    ) 
 
    return s; 
 
} 
 

 
var arrayOfObjects = [ 
 
    { name: 'Edward', value: 21 }, 
 
    { name: 'Sharpe', value: 37 } 
 
    ]; 
 

 
console.log(
 
    arrayOfObjects.forEach(function(parmArrItem) 
 
     { 
 
      const p=stringifyObj(parmArrItem); 
 
      console.log(p); 
 
     } 
 
));

在下面的代碼,2個對象都顯示正常,但在那之後,我得到在運行結束時顯示undefinedundefined從哪裏來?謝謝。

+0

這不是如何[**'forEach' **](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach)被使用。 –

+2

你忘了正確申報's'。任何未使用'var'(或'let')聲明的變量都是頂級全局變量,並且這總是一個錯誤。像jshint這樣的靜態代碼分析工具向您顯示這些錯誤,並使用它們。 – Tomalak

+0

@Tomalak,謝謝,我忽略了這一點。 – NoChance

回答

7

arrayOfObjects.forEach什麼也沒有返回。

因此,當您使用console.log()作爲無效函數時,您收到了undefined

forEach方法只針對數組中的每個項目執行回調提供的函數。

隨着換言之,console打印的評估一個表達式結果。

console.log()是未定義的,因爲你的函數或表達式沒有顯式地返回一些東西。

function stringifyObj(parmObj){ 
 
    s=""; 
 
    Object.getOwnPropertyNames(parmObj).forEach 
 
    (
 
     function (val, idx, array) { 
 
      s+=val + ' -> ' + parmObj[val]+"\n"; 
 
     } 
 
    ) 
 
    return s; 
 
} 
 

 
var arrayOfObjects = [ 
 
    { name: 'Edward', value: 21 }, 
 
    { name: 'Sharpe', value: 37 } 
 
    ]; 
 

 

 
arrayOfObjects.forEach(function(parmArrItem) 
 
     { 
 
      const p=stringifyObj(parmArrItem); 
 
      console.log(p); 
 
     } 
 
);

+0

你是對的。 outter console.log是多餘的,謝謝。 – NoChance