Browser Object Model e o Objeto window em JavaScript
A interação com o navegador web e seus objetos é crucial em JavaScript. Utilizar objetos do navegador permite manipular elementos HTML na página ou interagir com o usuário.
Todos os objetos por meio dos quais o JavaScript interage com o navegador são descritos pelo conceito de Modelo de Objeto do Navegador (Browser Object Model, BOM).
O BOM pode ser visualizado como a seguinte estrutura:

No topo da estrutura, está o objeto principal, o window, que representa o navegador como um todo. Este objeto contém vários outros objetos, incluindo o document, que representa a página web exibida no navegador.
O Objeto window
O objeto window é a janela do navegador web onde as páginas da web são exibidas. Sendo um objeto global, não é necessário prefixar seus métodos e propriedades com o nome window. Por exemplo, o método alert() pode ser chamado como window.alert("Olá, mundo!") ou simplesmente alert("Olá, mundo!").
No entanto, sendo um objeto global, isso impõe algumas restrições. Por exemplo:
var alert = function (message) {
console.log("Mensagem: ", message);
};
window.alert("Olá, mundo!");Aqui, uma variável global alert é definida com var. Todas as variáveis globais ou funções declaradas são automaticamente adicionadas ao objeto window. Se uma nova função tiver o mesmo nome que um método existente, como alert(), isso redefinirá o método no objeto window com a nova função.
Além disso, se declararmos qualquer variável global, ela estará acessível como uma propriedade do objeto window:
var message = "hello";
console.log(window.message);Propriedades do window
As propriedades do objeto window fornecem várias informações sobre a janela do navegador:
innerHeight: altura da janela incluindo barras de rolagem horizontais.innerWidth: largura da janela incluindo barras de rolagem verticais.outerHeight: altura externa da janela do navegador incluindo todas as barras de rolagem.outerWidth: largura externa da janela do navegador incluindo todas as barras de rolagem.pageXOffset: alias parawindow.scrollX.pageYOffset: alias parawindow.scrollY.screenX: posição da janela do navegador em relação ao lado esquerdo da tela.screenY: posição da janela do navegador em relação ao topo da tela.scrollX: quantidade de pixels que a página da web foi rolada horizontalmente.scrollY: quantidade de pixels que a página da web foi rolada verticalmente.
Componentes do navegador
A janela do navegador geralmente consiste em vários componentes que podem variar dependendo do navegador e das configurações pessoais. Em geral, uma janela típica de navegador inclui:

- Barra de endereços para inserir URLs ou consultas de pesquisa(Address Bar).
- Barra de status que indica se a página web está carregada ou em processo de carregamento(Status Bar).
- Barra de menus(Menu Bar).
- Barra de ferramentas(ToolBar).
- Uma "barra pessoal" que pode conter, por exemplo, favoritos(Personal Bar).
- Barras de rolagem que mostram a posição horizontal e vertical(Horizontal/Vertical ScrollBar).
O objeto window tem capacidades limitadas para interagir com esses componentes. Em particular, para verificar a presença desses componentes, o objeto window possui algumas propriedades:
locationbar: contém um objeto que indica se a barra de endereços está sendo exibida ou não.menubar: indica se a barra de menu está sendo exibida ou não.personalbar: indica se a barra pessoal (por exemplo, a barra de favoritos) está sendo exibida ou não.scrollbars: indica se as barras de rolagem estão sendo exibidas ou não.statusbar: indica se a barra de status está sendo exibida ou não.toolbar: indica se a barra de ferramentas está sendo exibida ou não.
Por exemplo, vamos verificar se a barra pessoal está sendo exibida:
console.log(window.personalbar); // BarProp {visible: true} ou BarProp {visible: false}A propriedade retornará um objeto BarProp, no qual a propriedade visible indica se a barra está sendo exibida ou não.
O Objeto screen
O objeto screen fornece informações sobre a tela:
availTop: altura dos componentes fixos na parte superior do navegador.availLeft: largura dos componentes fixos na lateral esquerda do navegador.availHeight: altura máxima disponível menos a altura das barras superior e inferior.availWidth: largura máxima disponível menos a largura das barras laterais.colorDepth: profundidade de cor da tela.height: altura da tela em pixels.orientation: objeto que fornece informações sobre a orientação do dispositivo.pixelDepth: profundidade de pixel da tela.width: largura da tela em pixels.
Exemplo de uso:

console.log(screen.availTop); // 25
console.log(screen.availLeft); // 0
console.log(screen.availHeight); // 695
console.log(screen.availWidth); // 1280
console.log(screen.width); // 1280
console.log(screen.height); // 800
console.log(screen.pixelDepth); // 24
console.log(screen.colorDepth); // 24