var expect = function ( val) {
return {
toBe ( val2) {
if ( val != = val2) throw new Error ( "Not Equal" )
return true
} ,
notToBe ( val2) {
if ( val == = val2) throw new Error ( "Equal" )
return true
}
}
} ;
学到的知识点
1. 函数可以返回对象(对象里包括变量以及函数)
2. js中抛出错误 错误处理主要通过使用 throw 语句和 try…catch 块来实现。使用 throw 语句允许你创建自定义错误消息。
抛出字符串 在try里面通过throw抛出一个字符串,在catch里面会被捕捉到。
function checkName ( name) {
if ( name == = '' ) {
throw "Name can't be empty!" ;
}
return name;
}
try {
console. log ( checkName ( '' ) ) ;
} catch ( error) {
console. error ( error) ;
}
抛出 Error 实例: 一种更常见和推荐的方法是抛出一个 Error 实例。这允许在错误中包含比如堆栈跟踪的附加元数据,有助于调试。 附加元数据有什么用?
message 你自己提供的错误描述,便于知道出错原因。
stack(堆栈跟踪) 自动记录了代码执行到出错时的调用链和具体行号。 开发时可以快速定位 bug 在哪里发生。
name 错误的类型(比如 Error, TypeError, RangeError 等),便于分类处理。
function divide ( numerator, denominator) {
if ( denominator == = 0 ) {
throw new Error ( "Cannot divide by zero!" ) ;
}
return numerator / denominator;
}
try {
console. log ( divide ( 5 , 0 ) ) ;
} catch ( error) {
console. error ( error. message) ;
console. error ( error. name)
console. error ( error. stack)
}
抛出错误集合 有时候,你可能希望同时抛出多个错误。这在处理 Promise 时特别有用。JavaScript 有一个内置的 AggregateError 对象,可以在这类情况下使用。AggregateError 对象可以接受一个错误对象的可迭代集合(可迭代集合就是可以用 for…of 或 forEach 一次次取出来的)和一个可选的消息作为参数。在 Promise.any() 等方法中,如果所有 Promise 都失败,JavaScript 会抛出一个 AggregateError,里面包含所有失败原因。
let error1 = new Error ( "First Error" ) ;
let error2 = new Error ( "Second Error" ) ;
try {
throw new AggregateError ( [ error1, error2] , "Two errors occurred." ) ;
} catch ( error) {
if ( error instanceof AggregateError ) {
console. error ( error. message) ;
for ( let e of error. errors) {
console. error ( e. message) ;
}
}
}