我正在寻找一种智能方法来检查传递给函数的对象参数
I am looking for a smart way to check the object parameter passed to a function
我处于以下情况:
我必须检查传递给函数的对象参数是否有效:
例:
function (opt) {
if (opt && opt.key && opt.key2) {
// make something
}
}
有没有更好的方法来进行这种检查?
不是真的。
除非你可以使用opt.pleaseReadMyMind()
;-)
但是,您可以创建一个方法来检查所有字段的值是否与null
不同。
这是
最紧凑的方法。
最正确的方法是:
if( typeof opt !== "undefined" && typeof opt.key !== "undefined" && typeof opt.key2 !== "undefined") {
但正如你所看到的,这是一个相当拗口的,并不是真的必要。
只需编写一个简单的测试例程来验证给定属性名称列表的对象:
// usage: testProps(object to test, [list, of, property, names])
// returns true if object contains all properties
function testProps(obj, props)
{
if (obj === null)
return false;
var i;
for (i=0; i<props.length; ++i)
{
if (!(props[i] in obj))
return false;
}
return true;
}
然后在您的函数中:
if (!testProps(obj, ['key', 'key2'])
return;
你正在做的事情是有效的,但它确实有缺陷。
if (opt && opt.key && opt.key2) {
如果opt.key
具有错误值 [0、null、false 等],则此检查将失败
在这种情况下,您必须执行一种类型的检查以确保它不是未定义的。
if (opt && typeof opt.key !== "undefined" && opt.key2) {
是的,但是只有当你有很多键要检查,而不仅仅是三个键时,它才会"更好"。像这样:
function opt(opt) {
for(var i = 0; i<3; i++) {
if(typeof opt["key"+((i > 0) ? "" : i + 1))] === "undefined") {
return;
}
}
// create object
}
如果未定义opt
则其所有键也将未定义,因此也对此进行了隐式检查。
您还可以定义要在数组中签入的变量名称,如下所示:
var propsToCheck = ["key", "key1", "key2"];
function(opt) {
for(var i = 0, ii = propsToCheck.length; i<ii; i++) {
if(typeof opt[propsToCheck[i]] === "undefined") {
return;
}
// create object
}
}
这不是一个更好的解决方案,但如果您打算检查三个或四个以上的属性,它确实允许更少的键入。
你总是可以这样做:
function validate(o, args) {
if (typeof(o) == 'object' && args instanceof Array) {
for (var i = args.length - 1; i >= 0; --i) {
if (typeof(o[args[i]]) === 'undefined') return false;
}
return true;
} else {
return false;
}
}
function myFunction(obj) {
if (validate(obj, ['foo', 'bar'])) {
// Your code goes here.
} else {
// Object passed to the function did not validate.
}
}
这里有一个小提琴给你:http://jsfiddle.net/reL2g/
相关文章:
- 如何检查函数是否将运行或可用
- 当提供函数名称时,检查函数是否存在于同一作用域中
- 是否可以使用Sinon.JS检查函数参数绑定是否正确
- 如何使用console.log在因果报应测试中检查函数
- Javascript:检查函数本身的相等性,而不是返回值
- 什么更快?运行空函数或检查函数是否未定义
- 隐藏字段并将其从检查函数中删除
- 在动态更改数据之后(在ajax调用之后)检查函数是否存在
- 检查函数是否属于javascript中的function类型
- NodeJS 在继续之前检查函数完成情况
- 检查函数是否返回 true 以执行另一个函数
- 在 AngularJS 中,如何对“$http”的所有响应应用检查函数
- 检查函数是否返回 null
- 已检查函数 JavaScript 不起作用.当我单击任何形状时,它不会创建表格结构
- 如何检查函数是否执行
- 检查函数是否为 jQuery ajax 请求
- 检查函数是否已完全执行
- 检查函数调用是否具有正确的参数类型
- 检查函数是否需要任何数据
- 如果由两个字符串组成,则存在Javascript检查函数