Strictly speaking, no. The JavaScript runtime has access to them, and in that capacity they can function as JavaScript objects. But they are defined in a way that is not bound to any particular language, and in most DOM implementations, they're native code. Most DOM implementations take care to make the objects function the same way you'd expect other objects in the chosen language to work, but that's not always the same way that JavaScript objects do: for example, you can't go around adding dynamic properties to objects when you're working in Java.
For most practical purposes, when you're working in the browser or in some other JavaScript runtime, yes. As I stated above, most DOM implementations try to make the DOM objects work the same way as other objects in the language, and for JavaScript, that means making them work like "real" JavaScript objects. Although IE took a while to really get this right (you need IE9+ to take full advantage), these days you can pretty much use DOM objects the same way you'd use any other JavaScript object.
document.bodyhas a JS prototype ofHTMLBodyElement. It can hold JS properties.HTMLElement.prototypeall my life (yes, yes, with all the necessary prophylactic measures).Array.prototype.slice.call(nodeList)) would throw an error, so the two didn't even play well together. Some host objects were implemented as ActiveX objects, famously the original XMLHttpRequest object which could only be feature tested for with try..catch. So I think Quentin has it about right.