Javascript 使用参数导致函数始终返回false
我想对函数的参数求和,当且仅当两个参数是数字时(因此是我的第一个函数)Javascript 使用参数导致函数始终返回false,javascript,if-statement,Javascript,If Statement,我想对函数的参数求和,当且仅当两个参数是数字时(因此是我的第一个函数) 函数checkNum(){ var num=0; for(var i=0;i
函数checkNum(){
var num=0;
for(var i=0;i
但是,无论args值是什么,我的第二个函数都执行求和。关于如何修复此问题的任何提示?checkNum()
未声明显式接受任何参数(这对查看函数的任何人都意味着不需要任何参数),并且在调用函数时不发送任何参数,因此参数。长度始终为0,您从未进入循环体,并且始终返回true
第二个函数是通过传递两个参数来调用的,因此对参数[0]
和参数[1]
的引用在这里是有效的。但是,即使如此,参数
的使用并不是真的适用于所有的参数传递
最好使用命名参数设置函数,然后通过这些名称访问它们。不鼓励使用参数
(虽然有效),作为访问参数的默认机制。它通常用于验证(例如,在函数尝试对参数进行操作之前,确保将正确数量的参数传递给函数)
此外,最好使用正则表达式测试数字,因为typeof
可能会对您“撒谎”。例如:
//你会认为不是“number”类型的数字吗?!
console.log(typeof NaN==“number”)
在checkNum
中计算的参数
数组包含传递给checkNum
的参数。但是您没有将任何参数传递给checkNum
。尝试将if语句更改为
if ( checkNum(arguments[0], arguments[1]) )
您没有向checkNum
传递任何参数。您可以使用apply
解决此问题:
// ...
if (checkNum.apply(this, arguments)) {
// ...
Edit:这将允许您检查传递给addTogether
的任意数量的参数。如果只允许两个参数,可以使用命名参数:
function checkNum(a, b) {
return typeof a === 'number' && typeof b === 'number';
}
function addTogether(a, b) {
if (checkNum(a, b)) return a + b;
else return undefined; // line not needed
}
addTogether(2, "");
checkNum()
不需要显式声明参数<代码>参数
是获取传递给JavaScript函数的参数的有效方法@KyleSposato是的,但是参数
在这里将是空的case@KyleSposato我没有说参数不是访问参数的有效方法。我解释过,在OPs案例中,没有一个被传递给checkNum()
,因此参数。长度将始终为0。我认为这很清楚。@BrettBeatty是的,但是说“checkNum()不接受任何参数”是无效的@KyleSposato我只是说函数没有显式声明任何参数,这通常是如何使用它的指示。JavaScript允许您访问参数,而不管签名是否指定参数,这一事实不适合用这种方式编写函数。显式声明您的参数,并将其作为参数显式传递,这样您会很快注意到此处的问题。是否有任何关于否决投票的解释?不鼓励应用吗?我从来没有遇到过问题。
function checkNum(a, b) {
return typeof a === 'number' && typeof b === 'number';
}
function addTogether(a, b) {
if (checkNum(a, b)) return a + b;
else return undefined; // line not needed
}
addTogether(2, "");