Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用参数导致函数始终返回false_Javascript_If Statement - Fatal编程技术网

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, "");