MST

星途 面试题库

面试题:JavaScript函数类型检查的灵活应用

假设你有一个函数,它接受一个回调函数作为参数。这个回调函数应该接受一个数组作为参数,数组中的元素都应该是对象,且对象必须包含名为'id'的数字类型属性。请编写代码实现对传入回调函数的参数类型进行检查,若不符合要求,给出恰当的错误提示。
38.3万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
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块中进行调用测试,确保能捕获到类型检查不通过时抛出的错误。