我有一些函数,每个函数都使用一个对象作为参数。
所有这些对象都具有相似的结构,因此,我没有在每个函数中进行相同的检查,而是创建了一些检查函数:
const checkIfOptionsIsObject = options => {
if (typeof options === 'object') {
return true;
} else {
throw new TypeError('The function argument should be an object.');
}
}
和
const checkOptionsMinMax = options => {
if (isNaN(options.min) || isNaN(options.max)) {
throw new TypeError("'min' and 'max' should both be numbers.");
} else if (options.min > options.max) {
throw new Error("'min' shouldn't be greater than 'max'");
} else {
return true;
}
}
这是我的使用方式:
const firstFunction = options => {
checkIfOptionsIsObject(options);
checkOptionsMinMax(options);
// do some stuff
return result;
}
const secondFunction = options => {
checkIfOptionsIsObject(options);
checkOptionsMinMax(options);
// do some other stuff
return result;
}
const thirdFunction = options => {
checkIfOptionsIsObject(options);
// do some stuff that doesn't use min and max
return result;
}
这段代码有什么问题吗?
答案 0 :(得分:1)
1)注意,在第一次检查 typeof object ==='object'时,如果名为object的变量实际上是一个数组,它也会为您提供'object'的类型。您可以在控制台中输入 typeof [] ==='object'来看到它,并注意它会返回true。最好使用 o!== null和&typeof o ==='object'&& Array.isArray(o)=== false; 进行对象测试。
const checkIfOptionsIsObject = options => {
if (options !== null && typeof options === 'object' && Array.isArray(options) === false) {
return true;
} else {
throw new TypeError('The function argument should be an object.');
}
}