It's common behavior in browsers, when adding an element with an ID attribute to the document, the browser will also show a property in window with the element's ID as the name, and the element as the value. I wouldn't rely on it if compatibility is a concern, as (a) it's not explicitly listed in any common standard i can find, and (b) magic variables can cause all kinds of headaches if you're not careful. But at least 4 of the 5 common browsers currently do it. ( IE, Chrome, Opera, and Firefox all do, though FF's web console is rather flaky about it. I don't have Safari sitting around to test.)
As for why your button is showing up as ({jQuery##########:2}):
When jQuery adds event handlers (or some other types of data) to an element, it sets a property with the name 'jQuery' + the version digits + a big random number, and the value being a unique integer. Something about resources and such.
Anyway, couple that with Firefox's built in console being rather dim-witted. The instant you add a property to an element, the console forgets it's an element. As an example, pop up a console in any existing page (even about:blank will do) and try typing this stuff in order (though you can skip the comments, of course):
d = document.createElement('div') // [object HTMLDivElement]
d // [object HTMLDivElement]
// all's good so far...
d.id = 'stuff' // "stuff"
d // [object HTMLDivElement]
// now set a property the browser doesn't define
d.randomProperty = 42 // 42
d // ({randomProperty:42})
// still an element, though
d.id // "stuff"
txt = document.createTextNode('test') // [object Text]
d.appendChild(txt) // [object Text]
d // ({randomProperty:42})
// and once the property's gone...
delete d.randomProperty // true
d // [object HTMLDivElement]
The issue is with the console, not with the browser or jQuery. The elements are still elements, and will still work just fine for any elementy stuff you want to do with them.