Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JavaScript. An Odd Assignment Sentence

var test=(a=1,[b=2]["sort"])();

This code works in Firefox resulting test=window (window object),

Is it valid JavaScript code? (I failed to find it in JavaScript references)

like image 547
Matt Elson Avatar asked Dec 31 '25 05:12

Matt Elson


1 Answers

It's "valid" but looks completely pathological to me. From the name of the var, I'd guess someone came up with this as a feature test at some point, but failed to add a comment explaining why.

So here's what it's doing. First, the two assignments will resolve to the assigned value, so we can replace them (they do assign variables, which is a side effect, but that doesn't affect the evaluation of this expression):

var test=(1, [2]["sort"])();

["sort"] is just .sort:

var test=(1, [2].sort)();

The comma operator will return the last value in the brackets, so we can lose that 1:

var test=([2].sort)();

So now the bracketed part is creating an array with the number 2 in it, and finding the sort method of that array. It then calls that method, but because of the first set of brackets it calls it without a specified context.

In non-strict mode, a function called with no context gets window as its this.

So it tries to sort window and returns the result, which is window, as you saw.

In strict mode, which the JS consoles in Firebug and Chrome are, functions called without context get undefined as their this, which means this example throws an error, as mplungjan noted above. https://developer.mozilla.org/en/JavaScript/Strict_mode

like image 91
N3dst4 Avatar answered Jan 02 '26 17:01

N3dst4



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!