函数、方法的length属性

拭目以待 发布于

首先,我们先来看一下已知存在length的字符串与数组。

字符串与数组的length:

var sl = 'abvadf',al=[1,2,3,4];
console.log(sl.length);   //6
console.log(al.length);   //4
很正常的将字符串的字符的个数与数组长度输出了,那么对于函数而言,length属性又是做什么的?

函数的length:

function testFnArgNum(a, b, c){
}
console.log(testFnArgNum.length); //3 这个数值是函数声明时的形参个数
通过示例,可以看出:函数的length存储了函数声明时的形参个数
对于Object而言,Object的属性可以是一个函数,我们称之为这个对象的方法。但是Object并不存在自带的length属性,那么方法是否存在?

方法的length:

var testObjectArgNum = {
name:'baukh'
,argNum: function(a, b, c){
}
}
console.log(testObjectArgNum.length);  //'undefined'  从这里可以看出Object本身并没有自带的length属性
console.log(testObjectArgNum.argNum.length); //3
这个数值是方法声明时的形参个数

经验证无论是普通的函数还是对象下的方法,length属性所存储的都是函数声明时的形参个数。
虽然javascript中有个JAVA字符,但是他并没有JAVA那么严格的参数校验。正因为如此,在一些情况下我们必须去手动进行校验。使用函数的length属性并配合上arguments.length,将可以更灵活的进行参数验证。

灵活的参数验证:


var testObjectArgNum = {
name:'baukh'
,argNum: function(a, b, c){
if(arguments.length !== testFnArgNum.length){
return 'error: 参数错误';
}
return 'success';
}
}
console.log(testObjectArgNum.argNum(1, 2)); //'error: 参数错误'
console.log(testObjectArgNum.argNum(1, 2, 3)); //'success'