2017-10-21 13 views
2

なぜ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 } 
 
    ]; 
 

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

、2つのオブジェクトが細かい表示されますが、その後、私は、実行の最後に表示さundefinedを取得しています。 undefinedはどこから来たのですか?ありがとう。

+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()を無効関数を受け取った無効関数に使用すると、

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

関連する問題