Saman Saman - 2 months ago 4
Javascript Question

The interpretation of one line Javascript code

What is the interpretation of this line in Javascript.

var x[],matrix[],n;
n = (matrix = x) && matrix.length;

Despite I searched for it, I couldn't find any tips.

Thank you


It does this:

  1. Assigns the value of x to matrix; the result of the matrix = x expression is the value that was assigned (this is true of all assignment expressions). Let's call that value "x-value". I don't want to call it x from here on out, because x is only evaluated once.
  2. If x-value is truthy1 (coerces to true), it assigns matrix.length to n; otherwise, assigns x-value to n.

So for instance, if x is [], the code sets matrix to point to the same empty array x does and sets n to 0 (matrix.length after the assignment). Other examples (I'd written these before you edited your question): If x is "foo", it sets matrix to "foo" and sets n to 3 (the length of matrix). If x is "" (a falsy value), it sets matrix to "" and sets n to "". If x is {foo:"bar"}, it sets matrix to refer to that same object and sets n to undefined (since the object has no length property). You get the idea.

#2 above comes about because && is not just a simple logical AND operator. a && b works like this:

  1. Evaluate a to get its value; let's call that a-value
  2. If a-value is falsy, the result of the && operator is a-value
  3. Otherwise, evaluate b and make that the result of the && operator

1 "Truthy" values are any values that aren't "falsy." The falsy values are 0, null, undefined, "", NaN, and of course, false.