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

时间:2012-02-21 10:00:51

标签: javascript parameters jslint

所有

我使用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";

2 个答案:

答案 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";
    }
    // ...
}