Javascript JSLint-不要改变参数<;x>;使用';参数';?

Javascript JSLint-不要改变参数<;x>;使用';参数';?,javascript,parameters,jslint,Javascript,Parameters,Jslint,全部, 我使用验证我的JS文件。在我最近的项目中,我使用以下格式为许多JavaScript函数设置默认值(更详细): 但是,这会导致最新版本的JSLint产生以下错误: "Do not mutate parameter 'option' when using 'arguments'." 我知道,使用更常见的方法来指定默认值(即,option=option |{};)可以抑制错误;但是,如果我打算将错误的值传递给选项,这将产生错误的行为 这个问题的唯一解决办法是引入新变量吗?e、 g: var

全部,

我使用验证我的JS文件。在我最近的项目中,我使用以下格式为许多JavaScript函数设置默认值(更详细):

但是,这会导致最新版本的JSLint产生以下错误:

"Do not mutate parameter 'option' when using 'arguments'."
我知道,使用更常见的方法来指定默认值(即,
option=option |{};
)可以抑制错误;但是,如果我打算将错误的值传递给
选项
,这将产生错误的行为

这个问题的唯一解决办法是引入新变量吗?e、 g:

var option2 = arguments.length > 2 ? option : "some default value";

我猜JSLint会警告您,因为您试图使用带有arguments关键字的检查来修改其中一个输入参数,但是,在尝试代码时,确实会给我任何警告

解决问题的方法是检查
选项是否已定义,这样您就可以通过发送falsy值来解决问题:

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.

在大多数情况下,你最好只做:

function(a, b, option) {
    option = option || "some default value";
    // ...
}


局部变量,即“引入第二个参数”是一个更好的解决方案。感谢您的建议-消除为
参数指定错误值的风险。长度是一个很大的优势。不幸的是,使用此方法会导致JSLint产生相同的错误。您确定吗?当我运行上面的两段代码时,JSLint并没有抱怨。事实证明,我们都可能是对的,这取决于具体情况。在我的代码中,我有一个带有两个参数的函数,需要设置默认值。我只在第一个问题上使用了您的解决方案(出于测试目的),而第二个问题仍然使用
arguments
变量。这导致JSLint针对这两个参数都产生了错误-非常奇怪!
function(a, b, option) {
    option = option || "some default value";
    // ...
}
function(a, b, option) {
    if ( !option || typeof option !== 'string' ) { 
        option = "some default value";
    }
    // ...
}