https://www.itpiran.net/blog/en/tutorials/understanding-bom-and-dom-in-javascript/