window对象

203 阅读2分钟

window 对象

BOM 的核心是 window 对象,表示浏览器的实例。 window 对象在浏览器中有两重身份,一个是 ECMAScript 中的 Global 对象,另一个就是浏览器窗口的 JavaScript 接口。这意味着网页中定义的所有对象、变量和函数都以 window 作为其 Global 对象,都可以访问其上定义的 parseInt() 等全局方法。

Global 作用域

因为 window 对象被复用为 ECMAScript 的 Global 对象,所以通过 var 声明的所有全局变量和函 数都会变成 window 对象的属性和方法。

var age = 29;
var sayAge = () => console.log(this.age);
console.log(window.age); // 29
sayAge(); // 29
window.sayAge(); // 29

如果在这里使用 let 或 const 替代 var ,则不会把变量添加给全局对象

let age = 29;
const sayAge = () => alert(this.age);
alert(window.age); // undefined
sayAge(); // undefined
window.sayAge(); // TypeError: window.sayAge is not a function

访问未声明的变量会抛出错误,但是可以在 window 对象上查询是否存在可能未声明的变量

// 这会导致抛出错误,因为 oldValue 没有声明
var newValue = oldValue;
// 这不会抛出错误,因为这里是属性查询
// newValue 会被设置为 undefined
var newValue = window.oldValue;

JavaScript 中有很多对象都暴露在全局作用域中,比如 location 和 navigator,因而它们也是 window 对象的属性。

窗口大小

window.innerWidth

返回浏览器窗口中页面视口的宽度(不包含浏览器边框和工具栏)

window.innerHeight

返回浏览器窗口中页面视口的高度(不包含浏览器边框和工具栏)

window.outerWidth

返回浏览器窗口自身的宽

window.outerHeight

返回浏览器窗口自身的高

获取视口大小

let pageWidth = window.innerWidth,
pageHeight = window.innerHeight;
if (typeof pageWidth != "number") {
  if (document.compatMode == "CSS1Compat"){
    pageWidth = document.documentElement.clientWidth;
    pageHeight = document.documentElement.clientHeight;
  } else {
    pageWidth = document.body.clientWidth;
    pageHeight = document.body.clientHeight;
  }
}

视口位置

window.pageXoffset

设置或返回当前页面相对于窗口显示区左上角的 X 位置

window.pageYoffset

设置或返回当前页面相对于窗口显示区左上角的 Y 位置

window.scrollX

返回文档/页面水平方向滚动的像素值

window.scrollY

返回文档在垂直方向已滚动的像素值。

window.scroll(x,y)

滚动窗口至文档中的特定位置

window.scrollTo(x,y)

把内容滚动到指定的坐标

window.scrollBy(x,y)

按照指定的像素值来滚动内容

导航与打开新窗口

window.open(strUrl, strWindowName)

打开一个新的浏览器窗口或查找一个已命名的窗口

定时器

JavaScript 维护了一个任务队列。其中的任务会按照添加到队列的先后顺序执行。setTimeout() 的第二个参数只是告诉 JavaScript 引擎在指定的毫秒数过后把任务添加到这个队列。如果队列是空的,则会立即执行该代码。如果队列不是空的,则代码必须等待前面的任务执行完才能执行

setTimeout()

指定在一定时间后执行某些代码

setInterval()

指定每隔一段时间执行某些代码

clearInterval()

取消循环定时