JSLint - 不要改变参数当使用“参数”时?

发布于 2025-01-07 22:59:50 字数 765 浏览 0 评论 0原文

所有,

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

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

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

"Do not mutate parameter 'option' when using 'arguments'."

我知道使用更常见的方法来分配默认值(即 option = option || {};)抑制错误;但是,如果我打算将 falsey 值传递给 option,这将产生不正确的行为。

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

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

All,

I use JSLint to validate my JS files. In my most recent project, I am using the following format to set default values for a number of JavaScript functions (further detailed here):

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

This however causes the latest build of JSLint to produce the following error:

"Do not mutate parameter 'option' when using 'arguments'."

I am aware that using the more common method for assigning defaults (i.e., option = option || {};) supresses the error; however, this will produce incorrect behaviour if I intend to pass a falsey value to option.

Is the only solution to this issue to introduce a new variable? e.g.:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

假扮的天使 2025-01-14 22:59:50

我猜 JSLint 会警告您,因为您尝试通过使用参数关键字检查来修改输入参数之一。但是,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.

I guess JSLint warns you since you try to modify one of the input arguments by using a check with the arguments keyword. JSHint, however, does give me any warning when trying your code.

A solution to your problem would be to check if option is defined or not, that way you go around the problem with sending in falsy values:

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

If you find that it is cumbersome to write this typeof check everytime, create an isDef function:

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

// Simon A.

风苍溪 2025-01-14 22:59:50

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

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

function(a, b, option) {
    if ( !option || typeof option !== 'string' ) { 
        option = "some default value";
    }
    // ...
}

In most situations you'd be better off just doing:

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

or

function(a, b, option) {
    if ( !option || typeof option !== 'string' ) { 
        option = "some default value";
    }
    // ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文