了解 JavaScript 中条件操作的箭头函数行为

Understanding Arrow Function Behavior with Conditional Operations in JavaScript

提问人:karthiK 提问时间:11/1/2023 更新时间:11/1/2023 访问量:50

问:

我正在学习 JavaScript 中的箭头函数,并尝试根据某个值有条件地将 show 的值设置为 false。为此目的使用“&&”运算符时,我遇到了以下代码的语法问题:

const obCallback = (something) =>
    something.value === 1
    && show = false;

我知道当我这样做时它会起作用:

const obCallback = (something) => {
    if (something.value === 1) {
        show = false;
    }
};

或者这个:

const obCallback = (something) => something.value === 1 ? show = false : undefined;

你们中的任何人都可以解释为什么第一个代码片段不起作用而另一个代码片段不起作用吗?我们可以只进行函数调用,而不在箭头函数中的“&&”之后进行赋值,因为以下方法似乎有效吗?

const obCallback = (something) =>
    something.value === 1
    && Dance(); //This works

我知道这似乎是一个基本问题,但我正在寻求一个彻底的解释,以提高我对将来使用箭头函数的理解。

JavaScript 语法 函数

评论

0赞 Kwright02 11/1/2023
第一个代码片段不起作用,因为它没有真正检查任何内容。它所做的只是获取某物的布尔表示.value === 1 然后会发生什么,它运行 show = false,然后到此结束。
0赞 Kwright02 11/1/2023
为了让它像你所期望的那样工作,你只需要把它变成一个循环运算符,如下所示: const obCallback = (something) => (shomething.value === 1 ? show = false : show = true);
1赞 Nick is tired 11/1/2023
我的钱是运营商优先的,(show = false);
0赞 Kwright02 11/1/2023
或者,如果您不想让 show = true,只需键入 null,什么都不会发生
0赞 Rory McCrossan 11/1/2023
@Barmar true,已删除。

答:

3赞 Barmar 11/1/2023 #1

=优先级低于 和 ,因此您的表达式被解析为===&&

const obCallback = (something) =>
    (something.value === 1
    && show) = false;

这是无效的,因为您无法分配给表达式。添加括号以强制进行预期的分组

const obCallback = (something) =>
    something.value === 1
    && (show = false);

也就是说,大多数程序员认为使用逻辑运算符代替控制流是很糟糕的形式。为此使用语句。if