JavaScript Window对象核心特性与编码方法详解
本文深入解析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()这四个关于数字处理的方法。
以上就是本文的全部内容,希望对大家的学习有所帮助。
JavaScript怎么遍历对象的Symbol键和不可枚举属性
2026-11-05 13:13:39
封装一个健壮的JS字符串判空工具函数
2026-11-05 12:16:14
JavaScript合并数组的三种常用方法:concat、扩展运算符与push
2026-11-05 11:22:29
JavaScript立即执行函数(IIFE)是什么及基本语法
2026-11-05 10:51:19
JS对象数组转字符串为什么推荐用JSON.stringify()
2026-11-05 09:40:31
