1.当传入的参数个数小于声明的参数个数时,缺少的参数值就是:undefined

类似方法重载

  1. var f1 = function(p1,p2,p3){
  2.     switch(arguments.length){
  3.         case 0:
  4.             alert("无参版本的f1")
  5.             break;
  6.         case 1:
  7.             alert("1个参数版本的f1:" + p1)
  8.             break;
  9.         case 2:
  10.             alert("2个参数版本的f1:" + p1 + "," + p2)
  11.             break;
  12.         case 3:
  13.             alert("3个参数版本的f1:" + p1 + "," + p2 +  "," + p3)
  14.             break;
  15.         default:
  16.             alert("不支持多于3个参数的调用!");
  17.             break;
  18.     }
  19. }
  20.  
  21. f1();
  22. f1("1");
  23. f1("a",100);
  24. f1("1","2","3");
  25. f1("1","2","3","4")

2.函数中可以通过arguments对象来获取函数的全部参数,也就是说可以用arguments进行参数个数检测

  1. var fnMustOneParam = function(p){
  2.                  
  3.     //检测有没有参数传入
  4.     if (typeof p=="undefined"){
  5.         alert("fnMustOneParam必须要有参数传入,才能调用(1)!");
  6.         return ;
  7.     }
  8.  
  9.     //也可以写成这样
  10.     if (arguments.length==0){
  11.         alert("fnMustOneParam必须要有参数传入,才能调用(2)!");
  12.         return;
  13.     }
  14.  
  15.     //检测参数个数
  16.     if (arguments.length!=0){
  17.         alert("fnMustOneParam只能传入一个参数调用!");
  18.         return;
  19.     }
  20.  
  21.     //to do...
  22.  
  23. }
  24.  
  25. function show()
  26. {
  27.     var largest=Max(10,20,30,1,10000,88,56,123);
  28.      alert(largest);//display:10000
  29. }
  30. function Max(m)
  31. {
  32.    var re=0;
  33.    for(var i=0;i<arguments.length;i++)
  34.    {
  35.       if(arguments[i]>re)
  36.       {
  37.          re=arguments[i];
  38.        }
  39.    }
  40. return re;
  41. }

Arguments对象是一个类似于数组的对象,可以按照参数的数目而不是名称来获取全部参数,并且arguments也具有length属性,可以用来获取获取实际参数的个数.

arguments虽然具有一些数组的特性,但是他不是数组.实际上arguments[]是和实际参数是引用同一变量的两种方法:

  1. function ChangeParamValue()
  2. {
  3.    ChangParamValueDo("第一个参数","第二个参数");
  4. }
  5. function ChangParamValueDo(a,b)
  6. {
  7.     alert("改变前:a:"+a+",b:"+b);// display:改变前:a:第一个参数,b:第二个参数
  8.    arguments[0]="arguments0";
  9.     arguments[1]="arguments1";
  10.    alert("用arguments改变后:a:"+a+",b:"+b); // display:用arguments改变后:a:arguments0,b:arguments0
  11. }
  12. arguments有一个callee属性,用没过来引用当前正在执行的函数
  13. function f(x)
  14. {
  15.       if(x<=1) return x;
  16.       return x*arguments.callee(x-1);
  17. }

3。把对象属性用作参数:这样可以不必去记参数的顺序,用对象的属性名来传参

  1. function ArrayCopy(name,age,grade,sex,height,weiht)
  2. {
  3.    alert("name:"+name+" age:"+age+" grade:"+grade+" sex:"+sex+" height:"+height+" weiht:"+weiht);
  4. }
  5. function EasyCopy(args)
  6. {
  7.     ArrayCopy(args.name||"",
  8.     args.age||0,
  9.     args.grade||"one",
  10.     args.sex||"可选",
  11.     args.height||100,
  12.    args.weight||100 )
  13. }
  14. function show()
  15. {
  16.     EasyCopy({name:'lily',age:'13',grade:'three'});
  17.    EasyCopy({name:'mark',height:'180',weight:180}); 
  18. }

4、js引擎同样不会检测参数的类型,如果您希望对参数的基本类型做些限制,可以利用typeof 来进行参数基本类型检测

  1. var fnString = function(s){
  2.     if (arguments.length!=1){
  3.         alert("参数个数不匹配!");
  4.         return ;
  5.     }
  6.  
  7.     if (typeof s != "string"){
  8.         alert("只能传入string类型的参数!");
  9.         return ;
  10.     }
  11.      
  12. }

5、自定义类的参数类型检测,如果是自定义类的参数,如果用typeof运算符号,只能得到object的类型检测结果,这时可利用instanceof运算符号来解决

  1. function Person(name,age){
  2.     this.name = name;
  3.     this.age = age;
  4. }
  5.  
  6. function fnPerson(p){
  7.     if (arguments.length==1 && p instanceof Person){
  8.     //if (arguments.length==1 && p.constructor == Person) //也可以写成这样
  9.         alert("fnPerson调用成功,p.name=" + p.name + ",p.age=" + p.age);
  10.     }
  11.     else{                  
  12.         alert("必须传入一个Person类型的参数才能调用!");
  13.     }
  14. }

JS function的参数问题的更多相关文章

  1. 给js function的参数设置默认值

    C# 中 function func(a,b=1){//具体方法} js 中 function func(a,b){ a= arguments[0] || 10; b= arguments[1] || ...

  2. 【转】javascript浏览器参数的操作,js获取浏览器参数

    原文地址:http://www.haorooms.com/post/js_url_canshu html5修改浏览器地址:http://www.cnblogs.com/JiangXiaoTian/ar ...

  3. js 读取 地址栏参数 转

    用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!)   function GetQueryString(name) {      var re ...

  4. Js替换地址栏参数

    开了博客竟然有9个月没在来写过了.真是惭愧.今天需要用到一个用js替换地址栏参数的的功能.就自己用JS自己写了一个简单的函数.贴出来仅供大家参考.代码都写了注释.如下: /* js替换URL参数值,无 ...

  5. js获取url参数的方法

    js获取url参数的方法有很多. 1.正则分析 function getQueryString(name) { var reg = new RegExp("(^|&)" + ...

  6. JS 不定函数参数argument的用法

    本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍. arguments arguments 该对象代表正在执行的函数和调用它的函数的参数. [func ...

  7. 【功能代码】---4用JS获取地址栏参数方法

    用JS获取地址栏参数方法 // 方法一:采用正则表达式获取地址栏参数:( 强烈推荐,既实用又方便!) function GetQueryString(name) { var reg = new Reg ...

  8. get方法与post方法的区别与js获取url参数的方式

    1.get方法与post方法的区别: 区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据:区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于UR ...

  9. (转)用JS获取地址栏参数的方法(超级简单)

    转自http://www.cnblogs.com/fishtreeyu/archive/2011/02/27/1966178.html 用JS获取地址栏参数的方法(超级简单) 方法一:采用正则表达式获 ...

随机推荐

  1. IOC原理解释

    spring ioc它其实是一种降低对象耦合关系的设计思想,通常来说,我们在一个类调用另一个类的方法的时候,需要不断的new新的对象来调用该方法,类与类之间耦合度比较高,有了ioc容器以后,ico容器 ...

  2. spring3 + mybatis + maven:junit测试错误

    org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component c ...

  3. coco2dx实现翻拍效果

    昨天吃饭看见同事演示他做的翻牌效果,感觉不错,我心血来潮也来搞个,很简单直接上代码. class FlipCard : public CCNode { public: CREATE_FUNC(Flip ...

  4. (转)SQL Server 的事务和锁(二)-Range S-S锁

    在这篇随笔中,我们的主要关注点在 Key-Range Lock.Key-Range Lock有 S-S.S-U.I-N.X-X几种情况.我们一个一个来说,力求明白.遗憾的是,这里可能会比较冗长,那么死 ...

  5. svn Error: post-commit hook failed (exit code 127) with output

    Command: Commit Modified: C:\Users\xsdff\Desktop\project\index.html Sending content: C:\Users\xsdff\ ...

  6. 菜鸟学Linux命令:bg fg jobs命令 任务管理

    jobs命令 jobs命令用于查看当前终端后台运行的任务 注意和ps的区别: ps命令用于查看瞬间进程的动态 通过一个实例可以理解它们之间的区别,依次执行如下命令:vim & //后台执行vi ...

  7. vs2010如何生成EXE文件如何更改EXE程序图标

    vs2010如何生成EXE文件 F5启动调试后,进入下面路径查找: 我的文档\Visual Studio 2010\Projects\项目名称\项目名称\bin\Debug 如何更改EXE程序图标 其 ...

  8. cookie 暂时保存内容与恢复

    <script type="text/javascript"> $(function(){ $('.ycb_anniu').click(function(){ $.co ...

  9. Android横屏竖屏切换的问题

    Android横屏竖屏切换的问题 http://blog.sina.com.cn/s/blog_77c632410101790w.html

  10. IE下Checkbox标签的onchange事件兼容

    Checkbox onchange事件在谷歌上ok,在ie8上不起作用了. 一番周折,测试发现勾选了以后还要点击其他位置才会触发onchange事件. 用度娘查询了一下. 有下面两种解决方式: 用on ...