3

我一直在这里摆弄一些代码。出于某种原因,函数被检测为抽象数组,因为它具有长度属性。不是主要问题,因为它是 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

4 回答 4

4

函数长度

长度是函数对象的一个​​属性,表示函数需要多少个参数,即形参的个数。相比之下,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 语言规范

本子句中描述的每个内置 Function 对象(无论是作为构造函数、普通函数还是两者兼而有之)都有一个长度属性,其值为整数。除非另有说明,否则该值等于函数描述的子条款标题中显示的命名参数的最大数量,包括可选参数。

于 2013-07-05T17:26:50.760 回答
3

length属性指定函数预期的参数数量。

来自MDN

length是函数对象的一个​​属性,表示函数需要多少个参数,即形参的个数。

(function(){}).length;  // 0
(function(a){}).length; // 1
于 2013-07-05T17:26:27.977 回答
1

函数的长度属性是它定义为接收的参数的数量。例子

function foo(a,b){
...
}

在这种情况下 foo.length 将为 2。

于 2013-07-05T17:27:12.320 回答
1

length实际上,函数上的字段是有目的的。来自Function.length 的 MDN 文档

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

于 2013-07-05T17:28:31.673 回答