Is setting multiple variables in 1 line valid in javascript? (var x=y='value';)

后端 未结 5 1401
春和景丽
春和景丽 2020-12-13 09:17

This is valid in php:

$x=$y=\'value\';

This will in esscence set both $x and $y to \'value\'.

Is this valid in javascript?

相关标签:
5条回答
  • 2020-12-13 10:00

    I'm pretty sure that the most readable form is the one that has not been brought up yet:

    let x = 0, y = 0
    
    0 讨论(0)
  • 2020-12-13 10:10

    To prevent the y from becoming a global variable, use the following:

    var x, y = x = 'value';
    

    Apparently the declarations are simply evaluated from left to right.

    0 讨论(0)
  • 2020-12-13 10:18

    When vars have different values you can easily write:

    var x = 0,
        y = 1,
        ...
        z = 2;
    
    0 讨论(0)
  • 2020-12-13 10:19

    Yes, that is valid in Javascript.

    However, after googling the problem, this Stack Overflow question explains some caveats, so use with caution.

    0 讨论(0)
  • 2020-12-13 10:21

    It only works if the var y as been previously defined, otherwise ywill be global.

    In such case, you better do:

    var x, y;
    x = y = 'value';
    

    Assignments Chaining

    Another antipattern that creates implied globals is to chain assignments as part of a var declaration. In the following snippet, a is local but b becomes global, which is probably not what you meant to do:

    // antipattern, do not use
    function foo() {
       var a = b = 0;
       // ...
    }
    

    If you’re wondering why that happens, it’s because of the right-to-left evaluation. First, the expression b = 0 is evaluated and in this case b is not declared. The return value of this expression is 0, and it’s assigned to the new local variable declared with var a. In other words, it’s as if you’ve typed:

    var a = (b = 0);
    

    If you’ve already declared the variables, chaining assignments is fine and doesn’t create unexpected globals. Example:

    function foo() {
       var a, b;
       // ...
       a = b = 0; // both local
    }
    

    “JavaScript Patterns, by Stoyan Stefanov (O’Reilly). Copyright 2010 Yahoo!, Inc., 9780596806750.”

    0 讨论(0)
提交回复
热议问题