I was browsing through some code and I was wondering how this could be useful
grid.push([].concat(row));
In my understanding it is the same as
grid.push([row]);
Why the 'concat' fuss?
You want to use .concat when you need to flatten the array and not have an array consisting of other arrays. E.g.
var a = [1,2,3];
var b = [4];
Scenario 1
console.log(b.push(a));
// Result: [4, [1,2,3]]
Scenario 2
console.log(b.concat(a));
// Result: [4,1,2,3]
So both of your scenarios in an array of array. Since [].concat() results in an array only, pushing both [row], [].concat(row) has the same result.
But if you want a flattened array, there is a slight change needed in your code, that you have to .concat the array row with grid and not .push the result of concat to it, as shown in scenario 2
console.log(b.push([a]));... (grid.push([row]);). It is how OP has specified in post.. I am curious about the difference...b.concat(a) and b.push(a) or the ones referred in OPs question?With grid.push([row]); you are pushing an array containing the row itself. If row is an array (e.g. [0, 1, 2]). You will push an array containing another array (i.e. [[0, 1, 2]]).
With grid.push([].concat(row));, you are pushing an array containing the elements contained in row (i.e. [0, 1, 2]).
However it is unclear why it is not just written grid.push(row) which, if row is an array, could seem more or less the same as grid.push([].concat(row));.
I can find two explanations for this:
row is not an array but an "array-like" object and [].concat(row) is used to convert it (just like Array.from could do).
Your coder does not want to push row but a copy of row instead that protected against any further modification of the original row.
rowmight be a primitive (or simply not an array) value.