Ранее возился с некоторыми элементами массива и обнаружил очень своеобразную оговорку
рассмотрите этот код:
[1,2,3].map(function(el) { return el * 2}).push(4*2).join(" ");
При написании я ожидал получить: 2, 4, 6, 8
вместо этого он выдал исключение. при дальнейших исследованиях .push
возвращает скорректированный .length
переданного массива:
[1,2,3].map(function(el) { return el * 2}).push(4*2);
>>> 4
[1,2,3,4].map(function(el) { return el * 2}).push("hi");
>>> 5
, а typeof - число, поэтому .join
выбрасывает, поскольку его нет в прото числа.
кажется, что вы можете передавать / цепочку любые другие методы массива, но не push. хотя это не проблема, и это работает, если вы передаете результат в переменную, почему происходит разбиение как есть и почему здесь возвращается свойство length?
это отлично работает ...
var foo = [1,2,3,4].map(function(el) { return el * 2});
foo.push(5*2);
console.log(foo);
>>> [2, 4, 6, 8, 10];
вероятно, еще один важный момент ...