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 相关文章推荐
web页面数据展示新想法(json)
Jun 08 Javascript
Ext.get() 和 Ext.query()组合使用实现最灵活的取元素方式
Sep 26 Javascript
JavaScript中的noscript元素属性位置及作用介绍
Apr 11 Javascript
jQuery实现流动虚线框的方法
Jan 29 Javascript
JS面向对象编程详解
Mar 06 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
Feb 21 Javascript
JavaScript定时器setTimeout()和setInterval()详解
Aug 18 Javascript
JavaScript实现汉字转换为拼音及缩写的方法示例
Mar 28 Javascript
Vue使用zTree插件封装树组件操作示例
Apr 25 Javascript
小程序封装wx.request请求并创建接口管理文件的实现
Apr 29 Javascript
vue+elementUI 实现内容区域高度自适应的示例
Sep 26 Javascript
15个值得收藏的JavaScript函数
Sep 15 Javascript
直接拿来用的页面跳转进度条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 sprintf()函数让你的sql操作更安全
2008/07/23 PHP
PHP filter_var() 函数 Filter 函数
2012/04/25 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
IE event.srcElement和FF event.target 功能比较
2010/03/01 Javascript
javascript 隔行换色函数代码
2010/10/24 Javascript
扩展jQuery对象时如何扩展成员变量具体怎么实现
2014/04/25 Javascript
nodejs实现黑名单中间件设计
2014/06/17 NodeJs
js实现按钮控制图片360度翻转特效的方法
2015/02/17 Javascript
javascript中的try catch异常捕获机制用法分析
2016/12/14 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
socket.io学习教程之深入学习篇(三)
2017/04/29 Javascript
Angular 4 指令快速入门教程
2017/06/07 Javascript
vue下拉列表功能实例代码
2018/04/08 Javascript
jquery实现的简单轮播图功能【适合新手】
2018/08/17 jQuery
详解如何用VUE写一个多用模态框组件模版
2018/09/27 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
python集合用法实例分析
2015/05/30 Python
python 多线程实现检测服务器在线情况
2015/11/25 Python
关于python下cv.waitKey无响应的原因及解决方法
2019/01/10 Python
Python小进度条显示代码
2019/03/05 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
python 读取更新中的log 或其它文本方式
2019/12/24 Python
在pytorch 中计算精度、回归率、F1 score等指标的实例
2020/01/18 Python
Python3如何判断三角形的类型
2020/04/12 Python
深入浅析python 中的self和cls的区别
2020/06/20 Python
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
法国发饰品牌:Alexandre De Paris
2018/12/04 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
Farfetch美国:奢侈品牌时尚购物平台
2019/05/02 全球购物
Python使用openpyxl复制整张sheet
2021/03/24 Python
西式婚礼证婚词
2014/01/12 职场文书
幼儿园食品安全责任书
2015/05/08 职场文书
辩护词格式
2015/05/22 职场文书
不同意离婚代理词
2015/05/23 职场文书
运动会宣传稿100字
2015/07/23 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书