这篇文章主要介绍了 javascript 类型系统之 Window 对象,整理关于 Window 对象的学习笔记,感兴趣的小伙伴们可以参考一下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
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'
2、特性
window 对象是隐式的,通常不显式引用;即使 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 的编码,因为 escape() 恰好编码了 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 value.htm#start
- console.log(encodeURIComponent(uri));//http://www.wrox.com/illegal value.htm#start
- console.log(escape(uri));//http://www.wrox.com/illegal value.htm#start
- var uri = 'http://www.wrox.com/illegal value.htm#start';
- console.log(decodeURI(uri));//http://www.wrox.com/illegal value.htm#start
- 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() 这四个关于数字的方法
来源: