JSLint:意外的赋值表达式

JSLint: Unexpected assignment expression

我收到此警告:

Unexpected assignment expression.
return task.completed = true; // Line 63, Pos 39

使用此代码时:

completeAll: function () {
    this.tasks = this.tasks.filter(function (task) {
        return task.completed = true;
    });
}

为什么?我还能如何编写此表达式来避免 JSLint 抛出警告?

P.S.

代码块取自此处的 Vue TodoMVC 示例:http://todomvc.dev/examples/vue/,因此我假设代码审查一定已经发生了。

它这样做是因为它警告您在您不仅要分配而且还要做某事的上下文中使用 = 而不是 =====与分配的结果。这是完全正确的 JavaScript,但通常是无意的。一个更好的例子是:

if (foo = bar) {
    // ...
}

...您可能指的是 =====(检查它们是否相等)。

如何解决它取决于您要做什么。从方法的名称来看,我假设您(好吧,他们正在)尝试设置 task.completed,在这种情况下,坦率地说 filter 是错误的函数;他们应该使用 forEach:

completeAll: function () {
    this.tasks.forEach(function (task) {
        task.completed = true;
    });
}

但是如果你(他们)真的想用filter:

completeAll: function () {
    this.tasks = this.tasks.filter(function (task) {
        task.completed = true;
        return true; // Or return task.completed
    });
}

如果您尝试进行比较(我对此表示怀疑),而不是作业,那么:

return task.completed == true;

return !!task.completed;

return task.completed; // If you know it's boolean already