Javascript 这句话会被认为是真的吗?
我是Javascript新手,需要对这一个脚本进行更改。然而,我注意到这一行代码完全把我弄糊涂了Javascript 这句话会被认为是真的吗?,javascript,Javascript,我是Javascript新手,需要对这一个脚本进行更改。然而,我注意到这一行代码完全把我弄糊涂了 function FIValidateForm(aForWhom, aDoNotShowWarning, aFromWhere) { try { PAIWarnings = ''; var pBlFalg = true; if (pBlFalg) pBlFalg = mfpCheckForFISave(a
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
尝试仅使用第一个参数调用函数,看看会发生什么。