JSLint - 使用'arguments'时不要改变参数<x>?

rob*_*yaw 6 javascript parameters jslint

所有,

我使用JSLint来验证我的JS文件.在我最近的项目中,我使用以下格式为许多JavaScript函数设置默认值(在此处进一步详述):

function(a, b, option) {
    option = arguments.length > 2 ? option : "some default value";
    // ...
}
Run Code Online (Sandbox Code Playgroud)

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

"Do not mutate parameter 'option' when using 'arguments'."
Run Code Online (Sandbox Code Playgroud)

我知道使用更常用的方法来分配默认值(即option = option || {};)可以解决错误; 但是,如果我打算传递一个falsey值,这将产生不正确的行为option.

引入新变量是解决此问题的唯一方法吗?例如:

var option2 = arguments.length > 2 ? option : "some default value";
Run Code Online (Sandbox Code Playgroud)

Net*_*dia 6

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

解决问题的方法是检查是否option已定义,这样就可以通过发送有价值的值来解决问题:

function(a, b, option) {
    if(typeof option === "undefined") {
        option = "some default value"; 
    }
    // ...
}
Run Code Online (Sandbox Code Playgroud)

如果您发现typeof每次编写此检查很麻烦,请创建一个isDef函数:

function isDef(param) {
    return typeof param !== "undefined";
}
function(a, b, option) {
    option = isDef(option) ? option : "some default value"; 
    // ...
}
Run Code Online (Sandbox Code Playgroud)

// Simon A.