面试题答案
一键面试function checkCallbackArgs(callback) {
return function (args) {
if (!Array.isArray(args)) {
throw new Error('回调函数的参数必须是数组');
}
for (let item of args) {
if (typeof item!== 'object' || item === null) {
throw new Error('数组中的元素必须是对象');
}
if (!('id' in item) || typeof item.id!== 'number') {
throw new Error('对象必须包含名为 \'id\' 的数字类型属性');
}
}
return callback(args);
};
}
// 使用示例
function exampleCallback(data) {
console.log('处理数据:', data);
}
const checkedCallback = checkCallbackArgs(exampleCallback);
try {
checkedCallback([{id: 1}, {id: 2}]);
// 传入错误数据测试
// checkedCallback([{notId: 1}]);
// checkedCallback([1, 2]);
// checkedCallback('not an array');
} catch (error) {
console.error(error.message);
}
上述代码定义了一个checkCallbackArgs
函数,它接受一个回调函数callback
作为参数,并返回一个新的函数。新函数会在调用传入的回调函数之前,对传入的参数进行类型检查。如果参数不符合要求,会抛出相应的错误。
在使用示例中,定义了一个简单的exampleCallback
回调函数,然后通过checkCallbackArgs
对其进行包装,在try...catch
块中进行调用测试,确保能捕获到类型检查不通过时抛出的错误。