【问题标题】:Is there a walrus operator in Node.Js?Node.Js 中有海象运算符吗?
【发布时间】:2020-11-17 04:15:01
【问题描述】:

在Python3.8中有一个叫做walrus的新操作符可以在一个条件中分配新的变量。 Node.Js中是否有类似的东西?

my_var = 5
if (result := my_var == 5):
    print(result)

【问题讨论】:

    标签: javascript python node.js


    【解决方案1】:

    分配和比较作为一个表达式。要使其在严格模式下工作并避免 linter 投诉,请在作业中添加括号。

    const my_var = 5;
    let result;
    if ((result = my_var) === 5) {
      console.log(result);
    }
    

    https://eslint.org/docs/rules/no-cond-assign#except-parens

    【讨论】:

    • 括号是一个很好的指针;帮助我得出以下结论:(t['v'] ?? (t['v'] = [])).push(1);
    【解决方案2】:

    不需要单独的运算符,赋值已经是Javascript中的表达式:

    "use strict";
    var my_var = 5;
    var result;
    if (result = my_var == 5){
      console.log(result)
    }
    

    【讨论】:

    • 这在严格模式下是行不通的,这是任何头脑正常的人都会使用的。
    • 我经常使用strict mode进行调试。
    • @Slbox 很好,但重点仍然存在。赋值是一个表达式,即使在严格模式下也是如此。
    • 考虑到这样的分配是一个错误,这是一个相当顽固的反应。你的回答没有错,但开始辩论是一件愚蠢的事情。
    • @Slbox 你是什么意思这是一个错误?这不是错误。这是语言的正常部分,它类似于 C 的赋值行为。试试这个,即使是在严格模式下。
    【解决方案3】:

    你可以这样做:

    const myNumber = 2;
    let newNumber;
    
    if (newNumber = myNumber === 2) {
      console.log('this works!');
    }
    

    有点相同,它在同一行中有一个赋值和一个比较。 您显然可以用这个代替您的问题:

    const my_var = 5;
    let result;
    if(result = my_var === 5) {
     console.log(result);
    }
    

    如您所见,必须事先声明 let 。

    【讨论】:

      【解决方案4】:

      除非您不使用严格模式,否则这将无法工作。这是为了防止出错。

      You can see this part of the document on MDN for more info

      如果您不使用严格模式,您可以执行@juanpa.arrivillaga 提到的操作,我再次强烈建议您这样做。严格模式可以为您节省 100 倍的麻烦。

      【讨论】:

      • 我没有投反对票,但正如我在评论中指出的那样,即使在严格模式下,赋值仍然是 javascript 中的表达式......该链接中没有任何内容与此相矛盾。
      猜你喜欢
      • 1970-01-01
      • 2021-11-25
      • 2019-12-10
      • 2022-07-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2020-02-19
      相关资源
      最近更新 更多