Javascript中验证输入参数

原创 2006年05月23日 16:13:00
Javascript的函数声明中的参数列表并不意味着什么……它们纯粹是为了方便访问这些参数而放在那里的,而并没有限制调用者怎么传参数,调用者想怎么传就怎么传,只要脚本不出错……

所有,有时候为了保证程序的健壮性,需要实现输入参数的验证和默认的输入参数。这几天学习的过程中恰好写了一些简单的解决方案,放在这里做备份。

首先是验证类型的合法性:

function validateType( obj, type) {
  if (!(obj instanceof type)) {
    throw new Error("Invalid type of the argument of " + arguments.callee.caller);
  }

  return true;
}

然后是验证参数值合法:

function validateValue(obj, vfunc) {
  validateType(vfunc, Function);  // vfunc must be Function object
  if (!vfunc(obj)) {
    throw new Error("Invalid value of the argument of " + arguments.callee.caller);
  }
}

再是默认参数,如果参数是undefined(也就是没有传参数),那么就使用指定的默认参数:

function setDefaultValue(param, defVal) {
  var undefined;
 
  if (undefined === param) {
    return defVal;
  } else {
    return param;
  }
}

OK,就这么多了。以后还可以再加,需要什么就做什么吧~
它们的用法很简单。例如函数add,假设传入的必须是正数,而且b可以不传,默认为10:

function add(a, b) {
  var adder = setDefaultValue(b, 10);

  validateType(a, Number);
  validateType(adder, Number);
  validateValue(a, function(n) {return n > 0 ? true: false;});
  validateValue(adder, function(n) {return n > 0 ? true: false;});

  return a + adder;
}

嗯,Javascript真的很有趣!

相关文章推荐

验证JavaScript函数“按参数传递”特性引发的思考

验证JavaScript函数“按参数传递”特性引发的思考俗话说,“书读百遍,其义自见”。阅读专业性的书籍更是需要不断去啃,直到读懂,完全理解为止。之前看了好几遍《JavaScript高级程序设计》,每...

JavaScript产品参数对比功能

  • 2011年11月30日 16:26
  • 19KB
  • 下载

Javascript中关键参数this浅析

自从接触javascript以来,对this参数的理解一直是模棱两可。虽有过深入去理解,但却也总感觉是那种浮于表面,没有完全理清头绪。   但对于this参数,确实会让人产生很多误解。那么thi...
  • gfjndh
  • gfjndh
  • 2014年10月15日 17:37
  • 168

JavaScript设置Div的margin参数

  • 2014年09月13日 18:07
  • 13KB
  • 下载

javaScript获取浏览器参数

  • 2010年08月30日 17:50
  • 312B
  • 下载

JavaScript函数中的参数类型

JavaScript是一种弱类型语言,由于声明形参无须定义数据类型,所以导致调用这些函数时可能出现问题。 比如: function changeAge(p){ p.setAge(20); ...

JavaScript中Window.open参数

  • 2011年12月19日 14:38
  • 43KB
  • 下载

javaweb实现在百度地图上的轨迹回放功能,action传入大量的参数到JSP的JavaScript中,实现绘制轨迹功能

面对这样一个需求,从数据库中动态的取出符合条件的经纬度,放在list中,通过百度api,绘制绘制轨迹。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Javascript中验证输入参数
举报原因:
原因补充:

(最多只允许输入30个字)