JavaScript Window对象核心特性与编码方法详解

作者:异步漫步时间:2026-10-30 03:52:20浏览:301

本文深入解析JavaScript中Window对象的特性,包括其作为全局作用域兜底对象的引用方式。详细列举了18个核心属性,重点对比encodeURI、encodeURIComponent及escape等编码方法的差异与适用场景,并解析eval函数的执行机制与安全限制,以及isFinite、isNaN等数字处理方法的用法。

Window对象概述与引用

Window对象是Web浏览器中JavaScript的终极兜底对象,位于作用域链的最末端,是一个包含所有其他对象的容器。任何在全局作用域中定义的属性和函数,都会自动成为Window对象的属性。


var myStringVar = 'myString';
var myFunctionVar = function(){};
console.log('myStringVar' in window);//true
console.log('myFunctionVar' in window);//true
 

1、引用方式

通常有两种方式来引用Window对象。第一种是直接赋予Window对象一个名称进行引用;第二种是在全局作用域中直接使用this关键字进行引用。


var foo ='bar';
windowRef1 = window;
windowRef2 = this;
console.log(windowRef1,windowRef2);//输出window对象的引用
console.log(windowRef1.foo,windowRef2.foo);//'bar' 'bar' 

Window对象特性与属性

2、特性说明

Window对象具有隐式特性,通常不需要显式引用。即使显式声明了Window对象,由于它处于作用域链的最后一环,其行为依然表现为隐式。


//window.alert()和alert()语句基本上是相同的
var foo = {//window对象在这里是隐式的,window.foo
 fooMethod: function(){
  alert('foo' + 'bar');//window对象在这里是隐式的,window.alert
  window.alert('foo' + 'bar');//显式调用window对象,效果一样
 }
}
foo.fooMethod();//window对象在这里是隐式的,window.foo.fooMethod()


3、属性列表 Window对象共包含18个属性。


undefined NaN Infinity 
Boolean String Number Object Array Function Date RegExp 
Error EvalError RangeError ReferenceError SyntaxError TypeError URIError 

[注意]禁止给undefined、NaN和Infinity赋值。

4、方法概览

JavaScript内置了一些预定义函数,这些函数被视为Window对象的方法。

编码方法与数字处理

1)、编码方法

encodeURI():用于对整个URI进行编码,使用特殊的UTF-8编码替换所有无效的字符。

encodeURI()不编码以下82个字符:

! # $ & ' ( ) * + , - . / : ; = ? @ _ ~ 0-9 a-z A-Z encodeURIComponent():用于对URI的某一段进行编码(常用于GET方法传递参数),同样使用特殊的UTF-8替换所有无效字符。

在实际应用中,使用encodeURIComponent()的情况比encodeURI()更为常见,因为实践中更常见的是处理查询字符串参数而非对基础URI进行编码。encodeURIComponent()不编码以下71个字符:

! ' ( ) * - . _ ~ 0-9 a-z A-Z escape():用于对字符串进行编码,将字符的Unicode编码转化为16进制序列。

ES3标准中反对使用escape(),并建议使用encodeURI和encodeURIComponent代替。不过,escape()依然被广泛用于Cookie的编码,因为它恰好编码了Cookie中的非法字符,且不对路径中常出现的“/”进行编码。escape()不编码以下69个字符:

* + - . / @ _ 0-9 a-z A-Z decodeURI():用于解码由encodeURI()编码的字符串。

decodeURIComponent():用于解码由encodeURIComponent()编码的字符串。

unescape():用于解码由escape()编码的字符串。


var uri = "http://www.wrox.com/illegal value.htm#start";
console.log(encodeURI(uri));//http://www.wrox.com/illegal%20value.htm#start
console.log(encodeURIComponent(uri));//http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start
console.log(escape(uri));//http%3A//www.wrox.com/illegal%20value.htm%23start
var uri = 'http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start';
console.log(decodeURI(uri));//http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start
console.log(decodeURIComponent(uri));//http://www.wrox.com/illegal value.htm#start
console.log(unescape(uri));//http://www.wrox.com/illegal value.htm#start

eval()方法

eval()方法类似于一个完整的ECMAScript解析器,仅接受一个参数,即要执行的JavaScript字符串。当解析器发现代码中调用了eval()方法时,会将传入的参数当作实际的ECMAScript语句进行解析,并将执行结果插入到原位置。eval()解释字符串的能力非常强大,但也极其危险。若用它执行用户输入数据,恶意用户可能输入威胁站点或应用程序的代码,即所谓的代码注入攻击。

[注意]在严格模式下,外部无法访问eval()中创建的变量或函数,对eval赋值也会导致错误。

2)、数字处理方法

Window对象下还提供了isFinite()、isNaN()、parseFloat()、parseInt()这四个关于数字处理的方法。

以上就是本文的全部内容,希望对大家的学习有所帮助。

作者最新文章