【问题标题】:JSLint: Unexpected assignment expressionJSLint:意外的赋值表达式
【发布时间】:2015-09-09 08:01:55
【问题描述】:

我收到此警告:

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 抛出警告?

附言

代码块取自此处的 Vue TodoMVC 示例:http://todomvc.dev/examples/vue/,因此我假设代码审查必须已经进行。

【问题讨论】:

  • @Tushar:你的意思是return task.completed;(或return true;)。尽管return task; 可以工作(非null 对象引用是真实的),但它具有误导性。

标签: javascript vue.js jslint


【解决方案1】:

它这样做是因为它警告您在不只是分配的上下文中使用= 而不是=====,而且还要对分配的结果执行某些操作。这是完全有效的 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

【讨论】:

    猜你喜欢
    • 2014-08-17
    • 2019-09-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-27
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2011-12-26
    相关资源
    最近更新 更多