javascript异常对象格式

javascript异常对象格式,javascript,node.js,exception,object,Javascript,Node.js,Exception,Object,默认情况下,如果找不到文件,Node.js会引发以下异常 { [Error: ENOENT, no such file or directory 'InvalidFile'] errno: 34, code: 'ENOENT', path: 'InvalidFile', syscall: 'open' } 从技术上讲,这应该是一个JavaScript对象。根据javascript对象语义,应该有一个逗号来分隔成员元素。在这种情况下,[Error:enoint,没有这样的文件或目

默认情况下,如果找不到文件,Node.js会引发以下异常

{ [Error: ENOENT, no such file or directory 'InvalidFile']
  errno: 34,
  code: 'ENOENT',
  path: 'InvalidFile',
  syscall: 'open' }
从技术上讲,这应该是一个JavaScript对象。根据javascript对象语义,应该有一个逗号来分隔成员元素。在这种情况下,
[Error:enoint,没有这样的文件或目录'InvalidFile']
errno:34,
之间没有逗号。我的问题是

  • 如何构造这样的对象

  • 我如何访问
    [错误:enoint,没有这样的文件或目录'InvalidFile']
    元素 在节目中


  • 嗯,这不完全是代码。它基于JavaScript的文本语法,但只是从中生成的对象(或类似的内部函数)的表示形式

    方括号中提到了其前面的类型。其余的是可枚举属性及其添加到其中的值的列表

    要自己创建它,请执行以下操作:

    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);
    

    嗯,这不完全是代码。它基于JavaScript的文本语法,但只是从中生成的对象(或类似的内部函数)的表示形式

    方括号中提到了其前面的类型。其余的是可枚举属性及其添加到其中的值的列表

    要自己创建它,请执行以下操作:

    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);
    
    我在回答第二个问题。公认的答案虽然很好,但似乎忽略了它

    在节点上,[Error:…]元素可以作为异常对象上的.stack进行访问。它是一个字符串,然后可以使用正则表达式对其进行解析,以获取模块和行号

    例如,您可以像这样解析第一个堆栈帧:

    ...
    } catch (e) {
        var msg, file, line, col;
        [msg,file,col] = e.stack.match(/\((.*):(\d+)\)/);
        if (file) {
            [,file,line] = file.match(/(.*):(\d+)/);
        }
    }
    
    我在回答第二个问题。公认的答案虽然很好,但似乎忽略了它

    在节点上,[Error:…]元素可以作为异常对象上的.stack进行访问。它是一个字符串,然后可以使用正则表达式对其进行解析,以获取模块和行号

    例如,您可以像这样解析第一个堆栈帧:

    ...
    } catch (e) {
        var msg, file, line, col;
        [msg,file,col] = e.stack.match(/\((.*):(\d+)\)/);
        if (file) {
            [,file,line] = file.match(/(.*):(\d+)/);
        }
    }
    

    我使用了
    throw Error(
    ,没有
    new
    ,它仍然有效。你能告诉我为什么它有效吗?@thefourtheye那是因为
    Error
    。我使用
    throw Error(
    ,没有
    new
    ,它仍然可以工作。你能告诉我为什么它可以工作吗?@thefourtheye那是因为
    Error
    。官方的JavaScript异常对象错误有许多用于特定目的的构造函数,例如SyntaxError。错误的标准属性包括
    消息
    (错误消息),
    名称
    (错误的名称)和(在某些平台上)
    stack
    (包含堆栈跟踪)。官方JavaScript异常对象错误有许多用于特定目的的构造函数,例如SyntaxError。错误的标准属性包括
    message
    (错误消息)、
    name
    (错误名称)和(在某些平台上)
    堆栈
    (包含堆栈跟踪)。