手机版

JavaScript中两类全局对象/函数的分析

时间:2021-11-12 来源:互联网 编辑:宝哥软件园 浏览:

这里的JavaScript指的是浏览器环境,包括主机环境。第一个是ECMAScript全局对象,第二个是Host环境下的全局对象/函数。1.核心JavaScript内置对象,即ECMAScript提供的独立于宿主环境的对象,在程序执行之前就已经存在(实例化)。ECMAScript被称为全局对象,分为以下几种:1。全局对象的值属性。有NaN、Infinity和undefined。2、全局对象的函数属性(全局对象的函数属性)。全局对象有eval、parseInt、parseFloat、isNaN、isFinite、decodeURI、encodedURI、编码的deuri component3和构造函数属性。有对象、函数、数组、字符串、布尔值、数字、日期、正则表达式、错误、求值错误、范围错误、引用错误、语法错误、类型错误和URIError。4.全局对象的其他属性,在Java中可以看作是一个静态类,可以直接与类名和点方法名一起使用。有数学,JSON。ECMAScript规范提到全局对象具有可写属性,即可写为真,可枚举为假,即它们不能被for in枚举。ECMAScript有这样一个段落,除非另有说明,否则全局对象的标准内置属性具有属性{[[可写]] : true、[[可枚举]] : false、[[可配置]] : true}。虽然规范提到了全局对象可以重写,但是没有人会重写它们。就在这里做个测试。复制代码如下:NaN=11eval=22对象=33;数学=44;alert(NAn);警报(评估);警报(对象);警报(数学);BR值属性、函数属性、构造函数(类)属性的全局对象,以及NaN、eval、object和Math的其他全局对象。结果如下

从结果可以看出,除了不能在IE9(pre3)/Safari中重写的NaN之外,其他都被重写了。这里只列出了四个。如果你感兴趣,你可以一个接一个地测试上面所有的全局对象。我在这里想表达的是,核心的JavaScript内置对象一般可以重写,尽管没有人这样做。在测试下,它的可枚举性复制代码如下: for(var a in NAn){ alert(a);} for(eval中的var a){ alert(a);}对于(对象中的变量a){警报(a);} for(数学中的var a){ alert(a);}所有浏览器不弹出,即不枚举属性。感兴趣的各方可以逐个测试全局对象的所有枚举。当然,对于火狐等一些浏览器来说,有些globalobjects在重写后是可以枚举的。第二,主机环境提供的全局对象/功能,如窗口、警报、settimeout、文档、位置等。将被大多数浏览器限制重写和复制代码如下:window=55警报(窗口);这句话在IE下会得到一个错误,提示非法复制,后面的弹出框不执行。当window=55不存在时,其他浏览器仍然会弹出。将alert的复制代码改写如下:alert=55console.log(警报);我在IE下得到一个错误,火狐/Chrome/Safari/Opera被重写。从相应的控制台,可以看到输出是55。可以看出,有些浏览器不支持重写宿主环境提供的全局对象/函数,而有些浏览器可以重写。声明全局变量复制代码有两种方式:a1=11var a2=22for(a in Window){ if(a==' a1 ' | | a==' a2 '){ alert(a)} }上面的代码不会在IE中弹出信息框,但代码在IE内部复制如下://IE带有(host _ object) {//Window带有(global _ object) {。var a2=22}}即a1和a2是上面提到的第一个JS引擎提供的Global对象上的属性,而不是第二个宿主环境提供的window对象上的属性。因此,在IE的in窗口中不存在a1和a2。如果在IE中提供了全局对象的引用,也许下面的代码会弹出一个信息框。复制代码如下: for(a in global){ if(a==' a1 ' | | a=' a2 '){ alert(a)} }火狐/Safari/Chrome/Opera的内部大致如下://火狐/Safari/Chrome/Opera With (host _)。var a2=22With(global_object){//Global}}表示a1和a2是主机环境提供的全局对象窗口上的属性,作为上面提到的第二种类型。因此,当在窗口中形成时,a1和a2都存在,并且弹出信息框。看看第三方声明全局变量window.a3=33的方式,说明a3是作为window的属性挂在window上的,所以对于in window可以在所有浏览器中获取a3。

版权声明:JavaScript中两类全局对象/函数的分析是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。