Javascript 检查js函数中未定义的参数

Javascript 检查js函数中未定义的参数,javascript,Javascript,当非函数数据类型为 作为第二个参数传递 包括正在通过的未定义? 功能测试(fn){ console.log(fn) //如果指定了非函数数据类型,则应引发错误 //作为第二个参数传递(包括传递的未定义参数) 如果(fn&&typeof fn!=“函数”)抛出错误(); 返回fn; } 函数demo(){} test()//未定义的OK! 测试(未定义);//也应该抛出错误 //抛出错误,因为已定义参数而不是函数 测试(“sdfasfs”)它不会抛出错误,因为if中的fn条件将被评估为false

当非函数数据类型为 作为第二个参数传递

包括正在通过的未定义?

功能测试(fn){
console.log(fn)
//如果指定了非函数数据类型,则应引发错误
//作为第二个参数传递(包括传递的未定义参数)
如果(fn&&typeof fn!=“函数”)抛出错误();
返回fn;
}
函数demo(){}
test()//未定义的OK!
测试(未定义);//也应该抛出错误
//抛出错误,因为已定义参数而不是函数

测试(“sdfasfs”)它不会抛出错误,因为
if
中的
fn
条件将被评估为false表示未定义,因此,if未评估为true且不会抛出错误

如果您希望在传递undefined时引发错误,那么可以将代码更新为以下内容

功能测试(fn){
console.log(fn)
//如果指定了非函数数据类型,则应引发错误
//作为第二个参数传递(包括传递的未定义参数)
if((fn | | fn==未定义)和&typeof fn!==函数)抛出错误();
返回fn;
}
函数demo(){}
test()//未定义的OK!
测试(未定义);//将抛出错误
//抛出错误,因为已定义参数而不是函数

测试(“sdfasfs”)它不会抛出错误,因为
if
中的
fn
条件将被评估为false表示未定义,因此,if未评估为true且不会抛出错误

如果您希望在传递undefined时引发错误,那么可以将代码更新为以下内容

功能测试(fn){
console.log(fn)
//如果指定了非函数数据类型,则应引发错误
//作为第二个参数传递(包括传递的未定义参数)
if((fn | | fn==未定义)和&typeof fn!==函数)抛出错误();
返回fn;
}
函数demo(){}
test()//未定义的OK!
测试(未定义);//将抛出错误
//抛出错误,因为已定义参数而不是函数

测试(“sdfasfs”)因为在JS中,
未定义
是错误的,所以您的第一个条件阻止您抛出

只需删除第一个条件

功能测试(fn){
console.log(fn)
//如果指定了非函数数据类型,则应引发错误
//作为第二个参数传递(包括传递的未定义参数)
if(typeof fn!=“函数”)抛出错误();
返回fn;
}
函数demo(){}
test()//未定义的OK!
测试(未定义);//也应该抛出错误
//抛出错误,因为已定义参数而不是函数

测试(“sdfasfs”)因为在JS中,
未定义
是错误的,所以您的第一个条件阻止您抛出

只需删除第一个条件

功能测试(fn){
console.log(fn)
//如果指定了非函数数据类型,则应引发错误
//作为第二个参数传递(包括传递的未定义参数)
if(typeof fn!=“函数”)抛出错误();
返回fn;
}
函数demo(){}
test()//未定义的OK!
测试(未定义);//也应该抛出错误
//抛出错误,因为已定义参数而不是函数

测试(“sdfasfs”)区分隐式传递和显式传递
未定义
的唯一方法是查看传递了多少个参数:

功能测试(fn){
console.log(fn)
//如果指定了非函数数据类型,则应引发错误
//作为第二个参数传递(包括传递的未定义参数)
如果(arguments.length>0&&typeof fn!=“function”)抛出错误();
返回fn;
}
函数demo(){}
test()//未定义的OK!
测试(未定义);//也应该抛出错误
//抛出错误,因为已定义参数而不是函数

测试(“sdfasfs”)区分隐式传递和显式传递
未定义
的唯一方法是查看传递了多少个参数:

功能测试(fn){
console.log(fn)
//如果指定了非函数数据类型,则应引发错误
//作为第二个参数传递(包括传递的未定义参数)
如果(arguments.length>0&&typeof fn!=“function”)抛出错误();
返回fn;
}
函数demo(){}
test()//未定义的OK!
测试(未定义);//也应该抛出错误
//抛出错误,因为已定义参数而不是函数

测试(“sdfasfs”)可能重复的方法似乎是正确的。错误是什么?所以您希望能够区分
test()
test(未定义)
?或者这些应该被同样对待?是的,我需要能够看到你的方法的不同可能的重复似乎是正确的。错误是什么?所以您希望能够区分
test()
test(未定义)
?还是应该对它们进行相同的处理?是的,我需要能够看到差异,然后
test()
将抛出。也许这就是OP想要的,但我不清楚,因为
//未定义OK注释。然后
test()
将抛出。也许这就是OP想要的,但我不清楚,因为
//未定义OK注释。