为什么函数有长度属性?

时间:2013-07-05 17:25:11

标签: javascript

我一直在摆弄一些代码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);
}

4 个答案:

答案 0 :(得分:4)

Function.length

  

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

  

指定函数预期的参数数量。