javascript异常对象格式
默认情况下,如果找不到文件,Node.js会引发以下异常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,没有这样的文件或目
{ [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
(错误名称)和(在某些平台上)堆栈
(包含堆栈跟踪)。