举例说明如何为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 相关文章推荐
jQuery实现鼠标经过提示信息的地图热点效果
Apr 26 Javascript
JQuery实现超链接鼠标提示效果的方法
Jun 10 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
Aug 07 Javascript
用js实现博客打赏功能
Oct 24 Javascript
浅谈js算法和流程控制
Dec 29 Javascript
jQuery基本筛选选择器实例代码
Feb 06 Javascript
mint-ui 时间插件使用及获取选择值的方法
Feb 09 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
Mar 03 Javascript
layer iframe 设置关闭按钮的方法
Sep 12 Javascript
javascript设计模式 ? 代理模式原理与用法实例分析
Apr 16 Javascript
小程序实现tab标签页
Nov 16 Javascript
vue3.0+vue-router+element-plus初实践
Dec 02 Vue.js
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
pdo中使用参数化查询sql
2011/08/11 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
IE和FireFox(FF)中js和css的不同
2009/04/13 Javascript
广告切换效果(缓动切换)
2009/05/27 Javascript
基于jQuery的试卷自动排版系统实现代码
2011/01/06 Javascript
为原生js Array增加each方法
2012/04/07 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
ExtJS 刷新后如何默认选中刷新前最后一次选中的节点
2014/04/03 Javascript
如何在Angular.JS中接收并下载PDF
2016/11/26 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
详解vue2.0+axios+mock+axios-mock+adapter实现登陆
2018/07/19 Javascript
微信小程序 MinUI组件库系列之badge徽章组件示例
2018/08/20 Javascript
详解多页应用 Webpack4 配置优化与踩坑记录
2018/10/16 Javascript
面试题:react和vue的区别分析
2019/04/08 Javascript
Vue实现计算器计算效果
2020/08/17 Javascript
在python中的socket模块使用代理实例
2014/05/29 Python
python处理大数字的方法
2015/05/27 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
Python学习教程之常用的内置函数大全
2017/07/14 Python
python3.6.3转化为win-exe文件发布的方法
2018/10/31 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
windows上安装python3教程以及环境变量配置详解
2019/07/18 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
Spartoo美国:欧洲排名第一的在线时装零售商
2019/12/12 全球购物
手术室护士自我鉴定
2013/10/14 职场文书
出纳岗位职责模板
2013/11/27 职场文书
项目资料员岗位职责
2013/12/10 职场文书
初一科学教学反思
2014/01/27 职场文书
企业文化标语大全
2014/06/10 职场文书
终止劳动合同协议书
2014/10/05 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
公文写作:工伤事故分析报告怎么写?
2019/11/05 职场文书
Python中else的三种使用场景
2021/06/16 Python
python用海龟绘图写贪吃蛇游戏
2021/06/18 Python
电频谱管理的原则是什么
2022/02/18 无线电