为什么以下 javascript 代码 return 为真?它不应该抛出错误吗?

Why does the following javascript code return true? Shouldn't it throw an error?

今天,我遇到了一个很难发现的错字,因为它并没有像我预期的那样抛出错误...

经过一些快速测试后,下面的代码总是 returns 正确,显然,在本例中 returns 'first'。为什么会这样?为什么它不产生错误?

下面是一个简单的代码示例:

function func(num) {
  return num = 5 ? 'first' : 'second';
}

console.log(func(1)); // log 'first'

我的 linter 发现了它,但我最初在 JSBin 中并没有注意到。

num = 5 ? 'first' : 'second' 表达式计算如下:

  1. 5 ? 'first' : 'second' 表达式首先求值(因为条件运算符的优先级高于赋值运算符)并且 returns 值 'first' 因为 5 是 "truthy".
  2. num = 'first' 表达式将 'first' 字符串分配给 num 变量,returns 'first' 因为赋值运算符 = returns 右操作数.

有用的链接: