Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 这句话会被认为是真的吗?_Javascript - Fatal编程技术网

Javascript 这句话会被认为是真的吗?

Javascript 这句话会被认为是真的吗?,javascript,Javascript,我是Javascript新手,需要对这一个脚本进行更改。然而,我注意到这一行代码完全把我弄糊涂了 function FIValidateForm(aForWhom, aDoNotShowWarning, aFromWhere) { try { PAIWarnings = ''; var pBlFalg = true; if (pBlFalg) pBlFalg = mfpCheckForFISave(a

我是Javascript新手,需要对这一个脚本进行更改。然而,我注意到这一行代码完全把我弄糊涂了

function FIValidateForm(aForWhom, aDoNotShowWarning, aFromWhere) 
{
    try 
    {
        PAIWarnings = '';
        var pBlFalg = true;

        if (pBlFalg) 
            pBlFalg = mfpCheckForFISave(aForWhom, aDoNotShowWarning, aFromWhere);

        if (pBlFalg == true)
            pBlFalg = PAIErrors();

        if ((pBlFalg) && (FIValidateForm.arguments.length == 1))
            mfpIFWarnings();

        return pBlFalg;
    }
    catch (err) 
    {
        logError(err, arguments.callee.trace());
    }
}
在运行时,如果我在第三个
if
语句上放置一个断点并检查
FIValidateForm.arguments
,我可以看到一个包含3项的数组。第一个包含
字符串
,第二个是
null
,第三个是
未定义
。数组的长度仍然为3

我是否正确地假设,无论传递给此方法的是什么,
FIValidateForm.arguments.length==1
将始终是
false
?或者是否存在我不知道的其他值/调用此方法的替代方法,以便
arguments.length
等于1

编辑:我看到JS有一个
参数.length
和一个
函数.length
。后者返回预期的参数数。。。那么,当函数定义为3时,如何调用一个方法,使其值为1呢

我是否正确地假设,无论传递给此方法的是什么,FIValidateForm.arguments.length==1都将始终为false

否,您可以通过执行以下操作使其
FIValidateForm.arguments.length
1:

FIValidateForm(justOneArgHere);
参数
表示函数的实际参数。(关于
参数
FIValidateForm.arguments
,请参见下面的1)

如果您想要函数的arity(正式声明的参数的数量),那就是
FIValidateForm.length
,并且它不会变化

那么,当函数定义为3时,如何调用一个方法,使其值为1呢

JavaScript根本不强制执行形式参数的数量;可以不带参数、一个参数或15个参数调用函数。如果未提供形式参数(声明的参数,如
aDoNotShowWarning
),则函数调用中的值将是
未定义的
。如果提供的参数多于声明的参数,则只能通过
参数
伪数组访问它们(在ES5及以下版本中)。(在ES2015及以上版本中,您可以将最后一个参数设置为“rest参数”,这意味着它将是从此点开始的所有参数的数组。)


例如:

函数foo(a,b,c){ log(arguments.length); 控制台日志(foo.length); } 傅(1),;
foo(1,2)不,它不会总是错误的

  • 如果将其称为
    FIValidateForm()
    ,则
    FIValidateForm.arguments.length==0

  • 如果将其称为
    FIValidateForm(arg1)
    ,则
    FIValidateForm.arguments.length==1

  • 如果将其称为
    FIValidateForm(arg1,arg2)
    ,则
    FIValidateForm.arguments.length==2

  • 如果将其称为
    FIValidateForm(arg1、arg2、arg3)
    ,则
    FIValidateForm.arguments.length==3

  • 等等


但是,不要使用
FIValidateForm.arguments
。这是不好的做法,严格禁止。改用
参数

TL;DR:如果只使用一个参数调用函数,
functionName.arguments.length==1
将为真


是的,
FIValidateForm.arguments.length
为您提供了调用
FIValidateForm
的参数的确切数量

考虑此函数
f

function f(first, second) {
  console.log('first argument:', first);
  console.log('second argument:', second);
  console.log('number of arguments:', f.arguments.length);
}
这两种情况:

// case 1:
f('something');
// prints:
//   first: something
//   second: undefined
//   number of arguments: 1

// case 2:
f('something', undefined);
// prints:
//   first: something
//   second: undefined
//   number of arguments: 2

请注意,
undefined
是缺少参数的“默认”值,但与显式的
undefined
参数不同,缺少的参数不计入
f.arguments.length

尝试仅使用第一个参数调用函数,看看会发生什么。