在项目中有时候需要通过判断某一个方法使用的时候填了多少个参数,以此来区分不同的状态下所需要执行的代码不同;实际上就是用到arguments这个属性,举个例子说明比较好理解:
首先,我定义了一个方法:
//此方法有两个参数,需要判断当前实际是传了一个参数还是两个参数,用于判断要不要执行某段代码
ProductOrder.prototype.addTickInfoList = function ($tr,data) {
var self=this;
var $table=$tr.find(".fixed-table-js");
var htmlTemp=$table.find(".add-tr-js").first().prop("outerHTML");
if(arguments.length==2){
$table.find("tbody").empty();
}
var dataCreate=data && data.length ? data :[{TravelerTypeID:"",SeatClassId:"",Price:"",Count:""}];
$.each(dataCreate,function(){
$table.find("tbody").append(htmlTemp);
$table.find(".add-tr-js").last().find(".person-type-js").val(this.TravelerTypeID);
$table.find(".add-tr-js").last().find(".flight-class-js").val(this.SeatClassId);
$table.find(".add-tr-js").last().find(".calculation-price").val(this.Price);
$table.find(".add-tr-js").last().find(".calculation-count").val(this.Count);
})
}
其实这个方法在项目中是用来区分当前调用是添加操作还是数据回填操作,arguments.length==2 就是判断data是否有传,有传则要先清空tbody里面的内容再执行回填;
这里会有人有疑问,要判断data是否存在,你直接if(data && data.length){}不就行了吗?
用上面的方法的问题是,如果我这样传addTickInfoList($tr,undifined);第二个参数虽然是错误的,但是我确实有传,直接写addTickInfoList($tr);和addTickInfoList($tr,undifined);还是有区别的
这里如果要获取行形参个数可以这么写addTickInfoList.length,输出是2,也就是说这个方法定义了2个参数,arguments.length输出的是使用方法实际传了几个参数。
补充:arguments在箭头函数里是不存在的!