我一直在摆弄一些代码here。出于某种原因,一个函数被检测为抽象数组b.c.它有一个长度属性。不是主要问题,b.c。它是0,但我发现这很奇怪。
var test_set = [null,
undefined,
NaN,
true,
false,
1,
'a',
{test:'test'},
[0],
function(){},
/test/
];
var index,
key,
test;
function isArrayAbstract (obj) {
return (obj != null) && (obj.length === +obj.length);
};
for(index = 0; index < test_set.length; index++){
test = isArrayAbstract(test_set[index]);
console.log('Mark | ' + test_set[index]);
console.log(test);
}
答案 0 :(得分:4)
length是函数对象的属性,表示函数期望的参数数量,即形式参数的数量。 相比之下,arguments.length是函数的局部函数,并提供实际传递给函数的参数数量。
参见示例:
console.log( (function () {}).length ); /* 0 */
console.log( (function (a) {}).length ); /* 1 */
console.log( (function (a, b) {}).length ); /* 2 etc. */
console.log( (function (...args) {}).length ); /* 0, rest parameter is not counted */
同时参考ECMAScript Language Specs:
本节中描述的每个内置Function对象 - 无论是构造函数,普通函数还是两者 - 都有一个length属性,其值为整数。除非另有说明,否则此值等于函数描述的子条款标题中显示的最大命名参数数,包括可选参数。
答案 1 :(得分:3)
length
属性指定函数预期的参数数量。
来自MDN:
length
是函数对象的属性,表示函数期望的参数数量,即形式参数的数量。
(function(){}).length; // 0
(function(a){}).length; // 1
答案 2 :(得分:1)
函数的length属性是它定义接收的参数数。实施例
function foo(a,b){
...
}
在这种情况下,foo.length将为2。
答案 3 :(得分:1)
实际上,函数上的length
字段有一个目的。来自MDN documentation for Function.length:
指定函数预期的参数数量。