2013-08-16 71 views
2

默認情況下,當找不到文件時,Node.js將拋出以下異常。javascript異常對象格式

{ [Error: ENOENT, no such file or directory 'InvalidFile'] 
    errno: 34, 
    code: 'ENOENT', 
    path: 'InvalidFile', 
    syscall: 'open' } 

從技術上講,這應該是一個JavaScript對象。根據JavaScript對象語義,應該有逗號分隔成員元素。在這種情況下,在[Error: ENOENT, no such file or directory 'InvalidFile']errno: 34,之間沒有逗號。我的問題是

  1. 我該如何構建一個這樣的對象?

  2. 如何在程序中訪問 [Error: ENOENT, no such file or directory 'InvalidFile']元素 ?

回答

4

那麼,它不是完全代碼。它基於JavaScript的文字語法,但僅表示從util.inspect()(或類似的內部函數)生成的對象。

方括號中提到類型Error之前其message。剩下的就是可添加到其中的可枚舉屬性及其值的列表。

要親自創建:

var error = new Error("ENOENT, no such file or directory 'InvalidFile'"); 
error.errno = 34; 
error.code = 'ENOENT'; 
error.path = 'InvalidFile'; 
error.syscall = 'open' 

console.log(error);    // uses `util.inspect()` 
console.log(util.inspect(error)); // or use it directly 

console.log(error.message); // "ENOENT, no such ..." 
console.log(Object.prototype.toString.call(error)); // "[object Error]" 

而且,對於格式的大樣本,嘗試登錄一些內置模塊:

console.log(console); 
{ log: [Function], 
    info: [Function], 
    warn: [Function], 
    error: [Function], 
    dir: [Function], 
    time: [Function], 
    timeEnd: [Function], 
    trace: [Function], 
    assert: [Function], 
    Console: [Function: Console] } 
+0

我用'拋錯誤( ',沒有'new',它仍然有效,你能告訴我它爲什麼起作用嗎? – thefourtheye

+0

@thefourtheye那是因爲'Error' [注入'new' for you](http://es5.github.io/#x15。 11.1)。 –