【发布时间】:2011-10-13 07:09:03
【问题描述】:
在函数中,如何区分非参数和未定义参数?
myFunc( 'first' );
var obj = { a: 123 };
myFunc( 'first', obj.b );
_or_
myFunc( 'first', undefined )
可以用arguments.length 指的是参数过去命名的参数,所以它没有帮助arguments.length 轻松解决 - 对不起大脑放屁!
function myFunc( a, b ) {
// Case A: if no second arg, provide one
// should be: if( arguments.length < 2 ) ...
if( b === undefined ) b = anotherFunc;
// Case B: if b is not resolved - passed but undefined, throw
else if( b === undefined ) throw( 'INTERNAL ERROR: undefined passed' );
// Case C: if b not a function, resolve by name
else if( typeof b != 'function' ) { ... }
...
}
在myFunc中捕获Case A和Case B的正确方法是什么?
【问题讨论】:
-
你什么时候会传递
undefined作为函数参数?这不寻常,是吗? -
这是一个图书馆。如果有人误用它,例如,传递一个未定义的,希望引发错误。
-
为什么说
arguments.length没有帮助?见jsfiddle.net/4V7FY -
无论如何提出的论点,每次都只用你的案例 A(或你的一个案例)处理
undefined不是更好吗?undefined? -
其实传递 undefined 应该和不传递参数一样对待,你不应该在两者之间做区分。
标签: javascript function syntax arguments