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中面向对象技术的模拟
Sep 25 Javascript
表单(FORM)的一些实用效果代码
Mar 25 Javascript
javascript 图片裁剪技巧解读
Nov 15 Javascript
解析JavaScript中点号“.”的多义性
Dec 02 Javascript
jquery列表拖动排列(由项目提取相当好用)
Jun 17 Javascript
JavaScript中闭包的写法和作用详解
Jun 29 Javascript
微信小程序  Mustache语法详细介绍
Oct 27 Javascript
vue + socket.io实现一个简易聊天室示例代码
Mar 06 Javascript
12个非常有用的JavaScript技巧
May 17 Javascript
在Vue中使用icon 字体图标的方法
Jun 14 Javascript
使用p5.js临摹动态图形
Oct 23 Javascript
JavaScript实时更新当前的时间的示例代码
Jul 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 jquery 多文件上传简单实例
2013/12/23 PHP
thinkphp中ajax与php响应过程详解
2014/12/08 PHP
php根据一个给定范围和步进生成数组的方法
2015/06/19 PHP
php基于CodeIgniter实现图片上传、剪切功能
2016/05/14 PHP
图文详解PHP环境搭建教程
2016/07/16 PHP
jquery的ajax从纯真网(cz88.net)获取IP地址对应地区名
2009/12/02 Javascript
在JavaScript中获取请求的URL参数
2010/12/22 Javascript
简介JavaScript中search()方法的使用
2015/06/06 Javascript
js编写贪吃蛇的小游戏
2020/08/24 Javascript
nodejs简单实现操作arduino
2016/09/25 NodeJs
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
js自定义input文件上传样式
2018/10/26 Javascript
使用vue-cli webpack 快速搭建项目的代码
2018/11/21 Javascript
nodejs实现用户登录路由功能
2019/05/22 NodeJs
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
javascript中call,apply,callee,caller用法实例分析
2019/07/24 Javascript
用Python写飞机大战游戏之pygame入门(4):获取鼠标的位置及运动
2015/11/05 Python
Linux下将Python的Django项目部署到Apache服务器
2015/12/24 Python
python魔法方法-属性访问控制详解
2016/07/25 Python
shelve  用来持久化任意的Python对象实例代码
2016/10/12 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
pandas 空的dataframe 插入列名的示例
2018/10/30 Python
PyQt5实现让QScrollArea支持鼠标拖动的操作方法
2019/06/19 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Lulu & Georgia官方网站:购买地毯、家具、抱枕、壁纸、床上用品等
2018/03/19 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
什么是事务?为什么需要事务?
2012/01/09 面试题
通用求职信范文模板分享
2013/12/27 职场文书
八年级数学教学反思
2014/01/31 职场文书
仓库管理员岗位职责
2014/03/19 职场文书
服务承诺书格式
2014/05/21 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
银行先进个人总结
2015/02/15 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
Python中的socket网络模块介绍
2022/07/23 Python