我有这样的代码:
var process = function(next){
//do stuff
if(typeof next != 'undefined') { next(a, b, c, d, e); }
}
我厌倦了到处输入typeof
。是否有一个我可以编写的全局函数来处理未定义以及所有参数的检查?
例如:
_call = function(next){
if(typeof next != 'undefined') next();
};
顺便说一句,上面的例子不起作用。因为节点在执行此操作时抛出错误:
_call(next('hello', 'world')); //ERROR! next is undefined
所以也许我可以这样做?
_call(next, argument1, argument2, ... )
答案 0 :(得分:2)
是否有内置函数处理未定义以及所有参数的检查?
不,但你可以自己写一个。
所以也许我可以这样做?
_call(next, argument1, argument2, ... )
是:
function _call(fn, ...args) {
if (typeof fn == "function") return fn(...args);
}
(使用ES6休息和扩展语法,在ES5中它将是fn.apply(null, Array.prototype.slice.call(arguments, 1)
)
答案 1 :(得分:1)
这有点像黑客,但你可以使用默认参数
(function(next=()=>{}){
//do stuff
next(a, b, c, d, e);
})();
因此,如果没有使用参数调用,则next将是一个不执行任何操作的空函数
答案 2 :(得分:1)
根本不需要typeof
。这种情况下的术语有点奇怪,但这里有解释:
var v; // initialize variable v
if (v) {} // works although v has type "undefined"
if (notInitialized) {} // ReferenceError: notDefined is not defined
当你有一个带参数的函数时,它是一样的。参数始终已初始化,但可能具有undefined
类型。
因此,您可以使用
var process = function(next){
//do stuff
if (next) { next(a, b, c, d, e); }
}
甚至
var process = function(next){
next && next(a, b, c, d, e);
}
但是,在实际调用next
之前,检查它是否真的是一个函数可能是一个很好的方法。
如果您使用的是ES6,则可能还可以使用default parameters以防这些情况与您的用例一起使用。
答案 3 :(得分:0)
它应该是未定义的并抛出错误。因为您调用名为{"Status":2,"TokenReg":"eeea7930efeb7715697a2035fcee3fdf","AllScores":"305","User_ID":"16433"}
的函数并将其作为参数传递给next
。
这是正确的:
_call
和
_call(function('hello', 'world'){//do dtuff});
答案 4 :(得分:0)
使用此
_call = function(next){
if(next && next != 'undefined' && next != 'null') next();
};