gpt4 book ai didi

JavaScript 引用错误 : Invalid left-hand side in assignment

转载 作者:行者123 更新时间:2023-12-03 02:02:08 25 4
gpt4 key购买 nike

这行代码有什么问题吗?

req.body.location && req.body.location.type = 'Point'

我只想添加一个类型属性,但出现错误

ReferenceError: Invalid left-hand side in assignment

但这会起作用

if(req.body.location) req.body.location.type = 'Point'

只是好奇这两个语句的含义不一样,为什么第一个语句不起作用?

最佳答案

TL;DR:使用req.body.location && (req.body.location.type = 'Point')

它们不是同一个声明。这是一个类似但完整的示例:

const foo = {};
foo && foo.bar = 'baz';

让我们将其分解为order precedence 。按照运算顺序,&& 是第 6 级,= 是第 3 级,因此 && 优先。因此,这部分代码首先运行:foo && foo.barfoo && foo.bar 的计算结果为 undefined - 现在我们不用担心细节。所以你最终得到的是:undefined = 'baz'

这是不允许的。您无法在 JavaScript 中重新定义 undefined

现在让我们考虑一下这段代码:

const foo = {};
if (foo) {
foo.bar = 'baz';
}

if 表达式优先,然后是赋值。

要修复原始语句,您可以在 && 运算周围添加括号。这与 JS 或 JSX 无关,只是 javascript 的工作原理。

给定 foo && (foo.bar = 'baz')首先,括号在第 20 级优先。这就像创建一个尚未执行的占位符变量。像这样的事情:

const runLater = () => (foo.bar = 'baz');
foo && runLater()

显然,这并不是由于范围问题而发生的情况,但从伪代码的 Angular 来看,您正在将语句折叠为占位符。

现在我们有了foo && runLater()。现在应用正常的 && 逻辑。它执行左侧,如果为 true,则执行右侧。因此 runLater() 然后将 foo.bar 设置为 baz。考虑起来有点棘手,因为括号具有更高的优先级,但要创建这种占位符。

关于JavaScript 引用错误 : Invalid left-hand side in assignment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49963088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com