8

Javascript Errorオブジェクトの2つのクロスブラウザプロパティ、つまり「name」と「message」が「for...in」メソッドを使用して見つからない理由を理解しようとしています

// error code
...
}catch( err ){

  // in FF this lists 3 properties for fileName, lineNumber and columnNumber...
  // but NOT name or message!
  for(var propertyName in err) {
    $( '#diags' ).append( 'err property: ' + propertyName + ', 
       value: ' + err[ propertyName ] + '<br>' );
  }
  // this line prints fine:
  $( '#diags' ).append( 'Error - name:' + err.name + ', message: ' + err.message + '<br>' );
}

編集

名前とメッセージを聞かれます。これらは、すべてのエラーが任意のブラウザに持つプロパティです(ただし、これらはありますか?)。したがって、上記のコードに、これらの「属性」またはそれらが正常に出力されることを示すコードを1行追加しました。

Edit2

マティの有益な答えに続いて、私は少し検索をしました。これは「検査」の質問に答えているようです。オブジェクトの列挙できない継承されたプロパティ名を取得することは可能ですか?

4

1 に答える 1

8

for ... inループは、列挙できないプロパティを反復処理しません。

var e = new Error('a');

console.log(e.propertyIsEnumerable('name'));
console.log(e.propertyIsEnumerable('message'));
console.log(e.propertyIsEnumerable('fileName'));
console.log(e.propertyIsEnumerable('lineNumber'));
console.log(e.propertyIsEnumerable('columnNumber'));

for(var prop in e)
{
    console.log(prop + ': ' + e[prop]);
}

出力

false
false
true
true
true
fileName: index.html
lineNumber: 25
columnNumber: 0
于 2013-03-27T17:59:01.177 に答える