【问题标题】:Why I get "Invalid left-hand side in assignment"?为什么我得到“分配中的左侧无效”?
【发布时间】:2018-05-15 03:16:41
【问题描述】:

有代码:

function search(list, q){
  var result = {};
  for(let id in list)(
    (!q.id    || (id == q.id)) &&
    (!q.name  || (list[id].name.search(q.name) > -1)) &&
    result[id] = list[id]
  );

  return result;
}

我收到此错误:

Uncaught ReferenceError: Invalid left-hand side in assignment    script.js:4

为什么“&&”是错的?

【问题讨论】:

  • 你在第一组括号之前缺少if吗?
  • result[id] = list[id] 应该是result[id] === list[id],因为它是一个条件
  • @Aravind 不正确。
  • @DanO "if" 一定不重要,因为 ( ) 中的所有逻辑运算符,而不是 { }
  • @TurarAbu 查看我的回答:问题是您在&& 列表末尾的赋值表达式不在括号中。

标签: javascript angularjs ecmascript-6


【解决方案1】:

问题在于赋值运算符= 是一个低优先级运算符,因此它的解释方式出乎你的意料。如果你把最后一个表达式放在括号中,它会起作用:

  for(let id in list)(
    (!q.id    || (id == q.id)) &&
    (!q.name  || (list[id].name.search(q.name) > -1)) &&
    (result[id] = list[id])
  );

【讨论】:

  • 真正的问题是使用逻辑运算符进行控制流。
  • @rockstar 很确定 :) 但这并没有错,很多核心库代码都会做这样的事情,所以人们会在“受人尊敬的”地方看到它。
【解决方案2】:

您的代码中似乎有错字:

result[id] = list[id] 应该是 result[id] == list[id]result[id] === list[id](如果您要进行严格比较)

【讨论】:

  • 没有。发布的代码使用 JavaScript 逻辑短路运算符有条件地执行操作。您建议的更改将使代码根本不执行任何操作。
  • 第 4 行的问题。
  • = 不可能是 ===== 的简写。它们完全有不同的含义。我检查了我的控制台,当我将其更改为 result[id] == list[id] 时它运行良好
  • @m-ketan 他想要使用赋值运算符 (=)。如果语句不执行赋值,代码就没用了。
  • @Pointy 哦,我现在明白了。
猜你喜欢
  • 1970-01-01
  • 2014-08-06
  • 2017-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
相关资源
最近更新 更多