javascript类型系统 Window对象学习笔记


Posted in Javascript onJanuary 07, 2016

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%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 相关文章推荐
用javascript控制iframe滚动的代码
Apr 10 Javascript
jQuery 1.8 Release版本发布了
Aug 14 Javascript
php对mongodb的扩展(初识如故)
Nov 11 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
Mar 18 Javascript
解决jquery版本冲突的有效方法
Sep 02 Javascript
js简易版购物车功能
Jun 17 Javascript
javascript观察者模式实现自动刷新效果
Sep 05 Javascript
jQuery实现可兼容IE6的滚动监听功能
Sep 20 jQuery
vue单页应用在页面刷新时保留状态数据的方法
Sep 21 Javascript
使用vue根据状态添加列表数据和删除列表数据的实例
Sep 29 Javascript
原生JS实现无缝轮播图片
Jun 24 Javascript
vue项目实现分页效果
Mar 24 Vue.js
直接拿来用的页面跳转进度条JS实现
Jan 06 #Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
Jan 06 #Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 #Javascript
谈谈JavaScript类型系统之Math
Jan 06 #Javascript
莱鸟介绍javascript onclick事件
Jan 06 #Javascript
莱鸟介绍window.print()方法
Jan 06 #Javascript
JavaScript实现点击按钮直接打印
Jan 06 #Javascript
You might like
PHP数据库操作面向对象的优点
2006/10/09 PHP
利用php+mysql来做一个功能强大的在线计算器
2010/10/12 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
JS+ACTIVEX实现网页选择本地目录路径对话框
2013/03/18 Javascript
js onload事件不起作用示例分析
2013/10/09 Javascript
jquery中子元素和后代元素的区别示例介绍
2014/04/02 Javascript
jquery中获得元素尺寸和坐标的方法整理
2014/05/18 Javascript
Visual Studio中js调试的方法图解
2014/06/30 Javascript
使用js画图之画切线
2015/01/12 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
浅谈javascript中的闭包
2015/05/13 Javascript
javascript+canvas实现刮刮卡抽奖效果
2015/07/29 Javascript
纯css实现窗户玻璃雨滴逼真效果
2015/08/23 Javascript
JavaScript中this详解
2015/09/01 Javascript
node.js插件nodeclipse安装图文教程
2020/10/19 Javascript
基于Bootstrap的UI扩展 StyleBootstrap
2016/06/17 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
Vue.js双向绑定操作技巧(初级入门)
2016/12/27 Javascript
JavaScript数据结构与算法之检索算法实例分析【顺序查找、最大最小值、自组织查询】
2019/02/22 Javascript
自定义Vue中的v-module双向绑定的实现
2019/04/17 Javascript
layui 弹出层值回传解决方式
2019/11/14 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
pandas的object对象转时间对象的方法
2018/04/11 Python
使用Python正则表达式操作文本数据的方法
2019/05/14 Python
python实现将视频按帧读取到自定义目录
2019/12/10 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
python中什么是面向对象
2020/06/11 Python
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
领先的英国注册在线药房 :Simply Meds Online
2019/03/28 全球购物
校车安全管理责任书
2015/05/11 职场文书
mysql sum(if())和count(if())的用法说明
2022/01/18 MySQL
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers