举例说明如何为JavaScript的方法参数设置默认值


Posted in Javascript onNovember 17, 2015

你是否遇到过这样的情况,写了个function,无参数。
 

function showUserInfo(){
alert("你好!我是小明。");
}

function showUserInfo(){ 
  alert("你好!我是小明。"); 
}

调用:
 

showUserInfo();

showUserInfo();

后来,发现其他地方也需要这个function,但是有变量值已经在function里面写死了,怎么办?加个参数吧。
 

function showUserInfo(name){
name=name||"小明";
alert("你好!我是"+name+"。");
}

function showUserInfo(name){ 
  name=name||"小明"; 
  alert("你好!我是"+name+"。"); 
}

说明一下:name=name||"小明" 这句代码的意思是如果name为null就等于默认值“小明”。也可以这样写:

function showUserInfo(name){
// name=name||"小明";
if(!name){
name="小明";
}
alert("你好!我是"+name+"。");
}

function showUserInfo(name){ 
// name=name||"小明"; 
  if(!name){ 
    name="小明"; 
  } 
  alert("你好!我是"+name+"。"); 
}

 
调用:
 

showUserInfo('小李');

showUserInfo('小李');

 
后来,需求又变了,需要加上年龄。好吧再改:
 

function showUserInfo(name,age){
name=name||"小明";
age=age||22;
alert("你好!我是"+name+",今年"+age+"岁。");
}

function showUserInfo(name,age){ 
  name=name||"小明"; 
  age=age||22; 
  alert("你好!我是"+name+",今年"+age+"岁。"); 
}

调用:
 

showUserInfo('小李');//结果:你好!我是小李,今年22岁。
showUserInfo('小李',19);//结果:你好!我是小李,今年19岁。
showUserInfo(null,19);//结果:你好!我是小明,今年19岁。

showUserInfo('小李');//结果:你好!我是小李,今年22岁。 
showUserInfo('小李',19);//结果:你好!我是小李,今年19岁。 
showUserInfo(null,19);//结果:你好!我是小明,今年19岁。

 
好了,如果我们需要再添加生日、电话、性别、QQ等等参数,又该怎么办呢?一个一个的设置默认值吗?实际上,我看到很多人确实是这样做的。下面我们来看一个更简单的方式。那就是使用Jquery的扩展。先看代码:
 

function showUserInfo(setting){
var defaultSetting={
name:"小明",
age:"22",
sex:"男",
phone:"13888888888",
QQ:"12345678",
birthday:"1980.12.29"
};
$.extend(defaultSetting,settings);
var message='姓名:'+defaultSetting.name
+',性别:'+defaultSetting.sex
+',年龄:'+defaultSetting.age
+',电话:'+defaultSetting.phone
+',QQ:'+defaultSetting.QQ
+',生日:'+defaultSetting.birthday
+'。';
alert(message);
}


function showUserInfo(setting){ 
  var defaultSetting={ 
    name:"小明", 
    age:"22", 
    sex:"男", 
    phone:"13888888888", 
    QQ:"12345678", 
    birthday:"1980.12.29" 
  }; 
   
  $.extend(defaultSetting,settings); 
   
  var message='姓名:'+defaultSetting.name 
      +',性别:'+defaultSetting.sex 
      +',年龄:'+defaultSetting.age 
      +',电话:'+defaultSetting.phone 
      +',QQ:'+defaultSetting.QQ 
      +',生日:'+defaultSetting.birthday 
      +'。'; 
  alert(message); 
}

说明:$.extend(defaultSetting,settings)的作用就是将传入的setting配置与defaultSetting合并,并用setting中的配置覆盖defaultSetting的配置。
 
调用:
 

showUserInfo({
name:"小李"
});
//结果:姓名:小李,性别:男,年龄:22,电话:13888888888,QQ:12345678,生日:1980.12.29。
showUserInfo({
name:"小红",
sex:"女",
phone:"13777777777"
});
//结果:姓名:小红,性别:女,年龄:22,电话:13777777777,QQ:12345678,生日:1980.12.29。




showUserInfo({ 
  name:"小李" 
}); 
//结果:姓名:小李,性别:男,年龄:22,电话:13888888888,QQ:12345678,生日:1980.12.29。 
showUserInfo({ 
  name:"小红", 
  sex:"女", 
  phone:"13777777777" 
}); 
//结果:姓名:小红,性别:女,年龄:22,电话:13777777777,QQ:12345678,生日:1980.12.29。

 
很简单吧!这样,就算有100个参数,都不怕了。
 
那么什么时候使用多个参数,什么时候使用这样的参数对象呢?我的经验是,根据实际需要,如果使用一、两个参数就可以搞定的就不使用参数对象。超过3个,我就会使用这种参数对象。

Javascript 相关文章推荐
JS this作用域以及GET传输值过长的问题解决方法
Aug 06 Javascript
jquery中each遍历对象和数组示例
Aug 05 Javascript
js生成验证码并直接在前端判断
May 15 Javascript
javascript单例模式的简单实现方法
Jul 25 Javascript
原生js实现放大镜特效
Mar 08 Javascript
微信小程序实现锚点定位楼层跳跃的实例
May 18 Javascript
react-router v4如何使用history控制路由跳转详解
Jan 09 Javascript
vue使用 better-scroll的参数和方法详解
Jan 25 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
Apr 20 Javascript
从组件封装看Vue的作用域插槽的实现
Feb 12 Javascript
微信小程序开发实现消息推送
Nov 18 Javascript
layui 上传图片 返回图片地址的方法
Sep 26 Javascript
Jquery easyui 实现动态树
Nov 17 #Javascript
总结JavaScript中布尔操作符||与&&的使用技巧
Nov 17 #Javascript
实例代码讲解jquery easyui动态tab页
Nov 17 #Javascript
用JavaScript来美化HTML的select标签的下拉列表效果
Nov 17 #Javascript
基于Jquery easyui 选中特定的tab
Nov 17 #Javascript
jquery实现简单的表单验证
Nov 17 #Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
Nov 17 #Javascript
You might like
实现树状结构的两种方法
2006/10/09 PHP
php中的实现trim函数代码
2007/03/19 PHP
php全角字符转换为半角函数
2014/02/07 PHP
PHP实现通过Luhn算法校验信用卡卡号是否有效
2015/03/23 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
IE6图片加载的一个BUG解决方法
2010/07/13 Javascript
JS无限树状列表实现代码
2011/01/11 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
js实现单行文本向上滚动效果实例代码
2013/11/28 Javascript
使用CSS+JavaScript或纯js实现半透明遮罩效果的实例分享
2016/05/09 Javascript
微信小程序 轮播图swiper详解及实例(源码下载)
2017/01/11 Javascript
NodeJS学习笔记之Module的简介
2017/03/24 NodeJs
JS中的三个循环小结
2017/06/20 Javascript
在JS循环中使用async/await的方法
2018/10/12 Javascript
代码整洁之道(重构)
2018/10/25 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[01:00:22]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第三场 1月10日
2021/03/11 DOTA
Python使用ctypes调用C/C++的方法
2019/01/29 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
浅谈keras2 predict和fit_generator的坑
2020/06/17 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
阿联酋手表和配饰购物网站:Rivolishop
2019/11/25 全球购物
人事主管的岗位职责
2013/11/16 职场文书
《兰亭集序》教学反思
2014/02/11 职场文书
激情洋溢的毕业生就业求职信
2014/03/15 职场文书
现实表现材料范文
2014/12/23 职场文书
贪污检举信范文
2015/03/02 职场文书
感恩的心主题班会
2015/08/12 职场文书
共青团优秀团员申请书(范文)
2019/08/15 职场文书
Java SSM配置文件案例详解
2021/08/30 Java/Android
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
Python实现日志实时监测的示例详解
2022/04/06 Python