The best answer I can offer is how the API works. I agree with you that things like attr and val will be more consistent if they return arrays (at least if the selector matches multiple elements).
You can get this effect with $.map if you want:
var attrs = $.map($('div.something'), function(element) { return $(element).attr('whatever'); });
Now "attrs" will be an array. You can also write your own function.
In any case, it’s important to note that arrays exist and then there are “jQuery objects”. This will never make sense for the "attr" or "val" (or something like that) that will be used in the middle of the jQuery set of operations if you think about it.
source share