所有
我使用JSLint来验证我的JS文件。在我最近的项目中,我使用以下格式为许多JavaScript函数设置默认值(更详细的here):
function(a, b, option) {
option = arguments.length > 2 ? option : "some default value";
// ...
}
然而,这会导致最新版本的JSLint产生以下错误:
"Do not mutate parameter 'option' when using 'arguments'."
我知道使用更常用的方法来分配默认值(即option = option || {};
)可以解决错误;但是,如果我打算将<em> falsey 值传递给option
,这将产生不正确的行为。
引入新变量是解决此问题的唯一方法吗? e.g:
var option2 = arguments.length > 2 ? option : "some default value";
答案 0 :(得分:6)
我猜JSLint会警告您,因为您尝试使用带有arguments关键字的检查来修改其中一个输入参数。但是,JSHint在尝试代码时会给我任何警告。
问题的解决方案是检查是否定义了option
,这样就可以解决发送虚假值的问题:
function(a, b, option) {
if(typeof option === "undefined") {
option = "some default value";
}
// ...
}
如果您发现每次编写此typeof
项检查都很麻烦,请创建isDef
函数:
function isDef(param) {
return typeof param !== "undefined";
}
function(a, b, option) {
option = isDef(option) ? option : "some default value";
// ...
}
// Simon A。
答案 1 :(得分:1)
在大多数情况下,你最好只做:
function(a, b, option) {
option = option || "some default value";
// ...
}
或
function(a, b, option) {
if ( !option || typeof option !== 'string' ) {
option = "some default value";
}
// ...
}