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 相关文章推荐
jquery checkbox全选、取消全选实现代码
Mar 05 Javascript
js select option对象小结
Dec 20 Javascript
jQuery源码分析之jQuery中的循环技巧详解
Sep 06 Javascript
js获取时间并实现字符串和时间戳之间的转换
Jan 05 Javascript
jQuery实现页面滚动时动态加载内容的方法
Mar 20 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
Bootstrap开发实战之响应式轮播图
Jun 02 Javascript
微信小程序 swiper组件轮播图详解及实例
Nov 16 Javascript
js手机号4位显示空格,银行卡每4位显示空格效果
Mar 23 Javascript
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 Javascript
JS中call()和apply()的功能及用法实例分析
Jun 28 Javascript
解决Echarts 显示隐藏后宽度高度变小的问题
Jul 19 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
phpfans留言版用到的install.php
2007/01/04 PHP
php park、unpark、ord 函数使用方法(二进制流接口应用实例)
2010/10/19 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
解析php中获取系统信息的方法
2013/06/25 PHP
PHP 之 写时复制介绍(Copy On Write)
2014/05/13 PHP
php的mssql数据库连接类实例
2014/11/28 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
Json_encode防止汉字转义成unicode的方法
2016/02/25 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
Chrome中JSON.parse的特殊实现
2011/01/12 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
javascript伸缩型菜单实现代码
2015/11/16 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
VueJs组件prop验证简单介绍
2017/09/12 Javascript
利用vue + koa2 + mockjs模拟数据的方法教程
2017/11/22 Javascript
详解最新vue-cli 2.9.1的webpack存在问题
2017/12/16 Javascript
详解Vue开发微信H5微信分享签名失败问题解决方案
2018/08/09 Javascript
浅谈从React渲染流程分析Diff算法
2018/09/08 Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
2019/04/16 Javascript
highcharts.js数据绑定方式代码实例
2019/11/13 Javascript
python使用邻接矩阵构造图代码示例
2017/11/10 Python
Python enumerate函数功能与用法示例
2019/03/01 Python
python读文件的步骤
2019/10/08 Python
Python模块 _winreg操作注册表
2020/02/05 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
HTML5中的音频和视频媒体播放元素小结
2016/01/29 HTML / CSS
茵宝(Umbro)英国官方商店:英国足球服装生产商
2016/12/29 全球购物
.net开发工程师面试题
2014/02/25 面试题
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
EJB的激活机制
2013/10/25 面试题
数控加工专业毕业生自荐信
2013/09/27 职场文书
中药学自荐信
2014/06/15 职场文书
实习生个人总结范文
2015/02/28 职场文书
nginx 配置缓存
2022/05/11 Servers