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中Eval函数的使用
Mar 23 Javascript
AngularJS内置指令
Feb 04 Javascript
详解JS中Array对象扩展与String对象扩展
Jan 07 Javascript
基于JavaScript实现瀑布流效果(循环渐近)
Jan 27 Javascript
浅谈Vue的基本应用
Dec 27 Javascript
angular.js 路由及页面传参示例
Feb 24 Javascript
jQuery图片切换动画效果
Feb 28 Javascript
JS给按钮添加跳转功能类似a标签
May 30 Javascript
详解前端路由实现与react-router使用姿势
Aug 07 Javascript
JS 事件机制完整示例分析
Jan 15 Javascript
详解Howler.js Web音频播放终极解决方案
Aug 23 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生成静态页
2006/11/25 PHP
php计算数组相同值出现次数的代码(array_count_values)
2015/01/20 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
node.js入门教程
2014/06/01 Javascript
ECMAScript6新增值比较函数Object.is
2015/06/12 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
2015/10/12 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
jQuery实现手势解锁密码特效
2017/08/14 jQuery
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
2019/11/09 Javascript
javascript中contains是否包含功能实现代码(扩展字符、数组、dom)
2020/04/07 Javascript
Openlayers实现扩散的动态点(水纹效果)
2020/08/17 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
[03:28]2014DOTA2国际邀请赛 EG战队官方纪录片
2014/07/21 DOTA
[56:58]VP vs Optic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python ftp上传文件
2016/02/13 Python
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
python生成每日报表数据(Excel)并邮件发送的实例
2019/02/03 Python
基于python全局设置id 自动化测试元素定位过程解析
2019/09/04 Python
wordpress添加Html5的表单验证required方法小结
2020/08/18 HTML / CSS
详解如何在登录过期后跳出Ifram框架
2020/09/10 HTML / CSS
经理秘书找工作求职信
2013/12/19 职场文书
高一英语教学反思
2014/01/22 职场文书
机械设计专业大学生职业生涯规划书范文
2014/09/13 职场文书
民主生活会批评与自我批评总结
2014/10/17 职场文书
保研推荐信格式
2015/03/25 职场文书
国庆放假通知怎么写
2015/07/30 职场文书
python3实现常见的排序算法(示例代码)
2021/07/04 Python