2013-03-27 89 views
4

試圖瞭解爲什麼JavaScript錯誤對象,即「名」和「消息」,兩跨瀏覽器的屬性不能用了「......在」方法Javascript - Error對象的名稱和消息屬性在哪裏?

// 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>'); 
} 

編輯找到

我被問到什麼是名稱和消息。這些都是屬性(他們雖然?),所有錯誤都在任何瀏覽器中...所以在上面的代碼中,我添加了額外的代碼行,顯示這些「屬性」或任何他們打印良好

編輯2

以下Mati的有用答案我做了一些搜索。這似乎回答了「檢查」問題:Is it possible to get the non-enumerable inherited property names of an object?

+0

什麼是'name'或'message'? – Amberlamps 2013-03-27 09:25:11

+0

JavaScript錯誤對象在某些瀏覽器中一直有點亂。它應該有一個'.message'屬性。其他任何東西都是專有的。 [本文](https://developer.mozilla.org/en/docs/JavaScript/Reference/Global_Objects/Error)顯示瞭如何標準化Error對象 - 請參閱標題爲「自定義錯誤類型」的部分。 – 2013-03-27 09:39:16

+0

@ Beetroot-Beetroot是的,我找到了那個頁面...因此,我驚訝的是,這兩個「屬性」(如果這是他們是什麼)實際上沒有使用上面的for ... in循環列出...我仍然感到困惑 – 2013-03-27 17:25:49

回答

6

A for...in loop不會遍歷不可枚舉的屬性。

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 
+4

謝謝!現在你一直在等待的問題是:如何找到那些不可枚舉的屬性?我知道,我知道:它們是不可枚舉的,所以你不能枚舉它們!這是答案嗎?在我更熟悉的語言中,通常有「檢查」對象的選項......類似於JS中的任何東西? – 2013-03-27 19:56:55

+1

@mike:看到[在這個問題上的答案](http://stackoverflow.com/questions/8024149/is-it-possible-to-get-the-non-enumerable-inherited-property-names-of-an -目的)。 (我想你已經知道了這一點 - 但對於那些最終在這裏結束的人,像我一樣,它可能仍然有用) – robert4 2015-07-17 20:16:24

+0

但是這引出了一個問題 - 「爲什麼地球上的Error.message屬性是不可枚舉的??」如果我看看Mozilla中的Javascript規範,它不會這麼說。這似乎是狡猾的! – BobDoolittle 2016-06-03 00:23:54