欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Javascript全局对象功能

程序员文章站 2022-06-20 23:51:40
javascript在被创建的时候就已经有了全局对象这个概念,在里,全局对象默认是“window”,在node.js里面叫做“global&rd...

javascript在被创建的时候就已经有了全局对象这个概念,在里,全局对象默认是“window”,在node.js里面叫做“global”

全局对象

javascript的全局对象主要有以下两个功能:

(1)提供对内置函数和值的访问,例如我们直接调用alert()或者使用window.alert()

alert("hello");

// the same as
window.alert("hello");

这对于其他全局对象也是一样的,例如使用window.array来取代array

(2)提供对全局函数和全局var变量的访问,例如:

var phrase = "hello";

function sayhi() {
  alert(phrase);
}

// can read from window
alert( window.phrase ); // hello (global var)
alert( window.sayhi ); // function (global function declaration)

// can write to window (creates a new global variable)
window.test = 5;

alert(test); // 5

但是,全局变量不能使用let/const来修饰,否者使用window对象来调用时显示undefined,例如:

let user = "john";
alert(user); // john

alert(window.user); // undefined, don't have let
alert("user" in window); // false

“window”对象的使用

在浏览器中,一般我们很少直接使用window对象,但在一些特定的情况下就需要使用到window对象:

(1)明确指定全局变量或者局部变量

var user = "global";

function sayhi() {
  var user = "local";

  alert(window.user); // global
}

sayhi();

(2)检测内置内置变量或者内置函数是否存在

if (window.xmlhttprequest) {
  alert('xmlhttprequest exists!')
}

由于xmlhttprequest属于window对象里的属性,所以我们必须使用window对象来调用,如果是if(xmlhttprequest)则会报错

(3)从特定的window中获取变量

我们知道浏览器可以有多个窗口和标签页,因此window对象可以嵌入到其他的<script> alert( innerwidth ); // get innerwidth property of the current window (browser only) alert( array ); // get array of the current window (javascript core builtin) // when the iframe loads... iframe.onload = function() { // get width of the iframe window alert( iframe.contentwindow.innerwidth ); // get the builtin array from the iframe window alert( iframe.contentwindow.array ); }; </script>

这里,前面两个alert()是来自当前窗口的window对象,而最后两个alert()是来自ifram窗口中的window对象

this和全局对象

在浏览器中,全局代码区的this指向的对象是window,例如:

// outside of functions
alert( this === window ); // true

在non-strict模式下直接调用函数的话,函数内部的this是指向window对象的,例如:

// not in strict mode (!)
function f() {
  alert(this); // [object window]
}

f(); // called without an object