Я просто добавляю свой голос к вышеупомянутому «вызову ES5's Array..filter()
с глобальным конструктором» хак-хаку, но я предлагаю использовать Object
вместо String
, Boolean
или Number
в качестве предложено выше.
В частности, ES5 filter()
уже не срабатывает для undefined
элементов в массиве; поэтому функция, которая повсеместно возвращает true
, которая возвращает все элементы filter()
попадания, обязательно будет возвращать только не undefined
элементы:
> [1,,5,6,772,5,24,5,'abc',function(){},1,5,,3].filter(function(){return true})
[1, 5, 6, 772, 5, 24, 5, 'abc', function (){}, 1, 5, 3]
Однако запись ...(function(){return true;})
длиннее записи ...(Object)
; и возвращаемое значение конструктора Object
при при любых обстоятельствах будет чем-то вроде объекта. В отличие от конструкторов примитивного бокса, предложенных выше, ни одно из возможных значений объекта не является ложным, и поэтому в логическом значении Object
является сокращением для function(){return true}
.
> [1,,5,6,772,5,24,5,'abc',function(){},1,5,,3].filter(Object)
[1, 5, 6, 772, 5, 24, 5, 'abc', function (){}, 1, 5, 3]