JavaScript高级程序设计4.pdf
虽然执行环境的类型总共只有两种——全局和局部(函数),但还有其他方法延长作用域链,有些语句可以在作用域链的前端临时增加一个变量对象,执行后会被移除try-catch语句的catch块和with语句
with语句会将指定对象添加到作用域链中,catch会创建一个新的变量对象
function buildUrl ()
{
var qs="?debug=true";
with (location)
{
var url=href + qs;
}
return url;
}
在此,with语句接受的是location对象,因此其变量对象就包含了location对象的所有属性和方法,而这个变量对象被添加到了作用域链的前端。
JavaScript没有块级作用域
if (true)
{
var color="blue";
}
alert(color); //"blue"
if语句的变量声明会将变量添加到当前执行环境(这里是全局执行环境)
由for语句创建的变量 i 即使在for循环结束后依然存在与循环外部的执行环境中
1声明变量如果没有使用var,该变量会自动添加到全局环境
2查询标识符由当前执行环境开始搜索
找出那些不再继续使用的变量,然后释放其占用的内存
常见的是 标记清除 进入环境标记,离开环境清除
引用计数 是跟踪记录每个值被引用的次数
对循环引用使用手工消除的方式myObject.element=null;element.someObject=null;
对数据的值设置null叫做解除引用,适用大多数全局变量和全局变量的属性,局部变量会在他们离开执行环境后被解除引用
第5章 引用类型
引用类型的值(对象)是引用类型的一个实例,在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起
新对象是使用new操作符后跟一个构造函数来创建的var person = new object();
Object的实例是存储和传输的理想选择
创建Object有两种方式:
第一种是new操作符后跟Object构造函数
var person = new Object();
person.name = "Nicholas";
person.age = 29;
另一种方式是使用对象字面量表示法,它是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程
var person =
{
name:"Nicholas",
age:29
};
ECMAScript中的表达式上下文指的是能够返回一个值(表达式),左花括号表示一个表达式或者代码块的开始
对象字面量也是向函数传递大量可选参数的首选方式
function displayInfo (args)
{
var output="";
if(typeof args.name=="string")
{
output +="Name: "+args.name+ "\n";
}
if(typeof args.age=="number")
{
output +="Age: "+args.age+ "\n"
}
alert(output);
}
displayInfo({
name:"Ncholas",
age:29
});
displayInfo({
name:"Greq"
});
一般来说,访问对象的属性都是点表示法,也是很多面向对象语言中通用的语法,在JavaScript中也可以使用方括号表示法来访问对象的属性,将访问的属性以字符串的形式放在方括号中
alert(person.name) //"Nicholas"
alert(person.["name"]) //"Nicholas"
方括号语法主要优点是可以通过变量来访问属性
var propertyName="name";
alert(person[propertyName]);//"Nicholas"
如果属性名中包含会导致语法错误的字符,或者属性名使用的是关键字或保留字,也可以使用方括号表示法
person["first name"]="Nicholas"; //由于"first name"包含一个空格,所以不能使用点表示法来访问
创建数组的基本方式有两种,第一种是使用Array构造函数
var colors= new Array();
如果预先知道数组的要保存的项目数量
var colors= new Array(20); //自动创建length值为20的数组
也可以向Array构造函数传递数组中应该包含的项
var colors= new Array("red","blue","green");
创建数组的第二种基本方式是使用数组字面量表示法 由一些包含数组项的方括号表示,多个数组项之间以逗号隔开
var colors= ["red","blue","green"];
var name= [];
var value= [1,2,] //在最后一个数组项加逗号会导致创建一个包含2或3项的数组
在读取和设置数组的值时,要用方括号并提供基于0的数字的索引
var color= ["red","blue","green"]; //定义
alert(colors[0]); //读取
color[1]="black"; //修改
color[3]="gray"; //新增
数组的length是可读写的,通过设置这个属性可以向数组移除或者添加新项
var colors=["red","blue","green"];
colors.length=2;
alert(colors[2]); //undefined
var colors=["red","blue","green"];
colors[colors.length]="black"; //添加第3项
colors[colors.length]="gray"; //添加第4项
var colors=["red","blue","green"];
colors[99]="black";
alert(colors.length); //100
检测数组
一般可以使用if (value instanceof Array)
{
//对数组的操作
}
instanceof操作符的问题在于,它假定单一的全局执行环境,如果网页包含多个框架就有多个不同的执行环境,就有多个不同版本的Array构造函数
为了解决这个问题ECMAScript5新增了Array.isArray()方法,这个方法能确定某个值到底是不是数组,而不管是在哪个全局执行环境中创建的
if(Array.isArray(value))
{
//对数组的操作
}
转换方法
所有对象都具有toLocaleString()、toString()、valueOf()方法
var colors=["red","blue","green"];
alert(colors.toStrings()); //red,blue,green
alert(colors.valueOf()); //red.blue,green
alert(colors); //red,blue,green
var person1=
{
toLocaleString:function()
{
return "Nikolaos";
},
toString:function()
{
return"Nicholas";
}
};
var person2=
{
toLocaleString:function()
{
return"Grigorios";
},
toString:function()
{
return"Greg";
}
};
var people = [person1,person2];
alert(people);
alert(people.toString());
alert(people.toLocaleString());
join()方法可以使用不同的分隔符来构建这个字符串
var colors=["red","blue","green"];
alert(colors.join(",")); //red,green,blue
alert(colors.join("||")); //red||green||blue
栈是一种LIFO(Last-In-First-Out后进先出)数据结构,栈中项的推入和移除只在栈的顶部发生,ECMAScript为数组提供push()和pop()方法实现类似的功能
var colors=new Array();
var count=colors.push("red","green"); //推入两项
alert(count); //2
count=colors.push("black"); //推入另一项
alert(count); //3
var item=colors.pop();
alert(item); //"black"
alert(colors.length); //2
-------------------------------------------今天任务没完成,欠债的感觉不好受,还要付出更多的时间才行呐,好惆怅好忧伤-----------------------------------------------------
JavaScript高级程序设计4.pdf的更多相关文章
- JavaScript高级程序设计61.pdf
JSON对象 早期的JSON解析器就是使用JavaScript的eval()函数,ECMAScript5对解析JSON的行为做出了规定,定义了全局对象JSON. JSON对象有2个方法:stringi ...
- JavaScript高级程序设计60.pdf
错误处理 try-catch语句 try{ //可能会导致错误的代码 }catch(error){ //在错误发生时如何处理 } error是一个包含着错误信息的对象,它有一个message属性,保存 ...
- JavaScript高级程序设计58.pdf
15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域 ...
- JavaScript高级程序设计57.pdf
表单序列化 首先了解一下浏览器如何将数据发送给服务器 对表单字段的名称和值进行URL编码,使用和号(&)分隔 不发送禁用的表单字段 只发送勾选的复选框和单选按钮 不发送type为“reset” ...
- JavaScript高级程序设计55.pdf
输入模式 HTML5为文本字段新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值 例如,只想在允许在文本字段中输入数值 <input type="text&q ...
- JavaScript高级程序设计54.pdf
过滤输入 对于一些浏览器,可以使用正则表达式里的text()测试用户按下的按键,Firefox和safari(3.1版本之前)会对向上向下.退格键和删除键触发keypress事件,在Firefox中, ...
- JavaScript高级程序设计53.pdf
共有的表单字段方法 每个表单字段都有两个方法:focus()和blur(),其中focus()用于将浏览器焦点设置到表单字段,激活表单字段.可以侦听页面的load事件 EventUtil.addHan ...
- JavaScript高级程序设计52.pdf
表单脚本 表单的基础知识 在HTML中,表单是由<form>元素表示的,在Javascript对应的是HTMLFormElement类型,它继承自HTMLElement,因此具有与其他HT ...
- JavaScript高级程序设计50.pdf
hashchange事件 HTML5新增了hashchange事件,以便在URL的参数列表(及URL中“#”号后面的所有字符串)发生变化时通知开发人员,之所以新增这个事件,是因为在Ajax应用中,开发 ...
- JavaScript高级程序设计49.pdf
HTML5事件 contextmenu事件 contextmenu事件是冒泡的,可以将事件处理程序指定到document,这个事件的目标是用户操作的元素,在兼容DOM的浏览器中使用event.prev ...
随机推荐
- php编译安装扩展curl
./configure --with-php-config=/opt/software/php5.4/bin/php-configyum install curl curl-devel
- RESTful 架构风格概述
http://blog.igevin.info/posts/restful-architecture-in-general/(非常好) http://blog.igevin.info/posts/re ...
- Java文件File操作一:文件的创建和删除
一.简述 File 文件类,主要对文件进行相关操作.常用的File操作有:文件(夹)的创建.文件(夹)的删除,文件的读入和下载(复制)等: 二.文件(夹)的创建和删除 1.创建过程 实例: //cre ...
- QVW中实现日期区间的选择功能!
QV在日期的选择上不是很灵活,日期区段的选择可以在列表框中直接用鼠标拖拉区段,如果跨周期比较长了还是不是很方便啦. 下面介绍的方式是完全实现了起始日期的选择功能. 注:日期这个字段在抽取的时候一定要格 ...
- HDU1862EXCEL排序
其实最近都没有兴趣做排序题目,因为我觉得纯粹排序对我而言进步不大,但是舍友TLE了,叫我试一试. 整道题的思路很简单啦,我用的是快排,比较的原则也给得很清楚,不必多言,我没有用stdlib的快排,也没 ...
- ENC28J60 + M430G2553,用uip搭建http服务器,解决“在XP系统下可以访问,在Win7下不能访问”的问题
近日,用ENC28J60,在M430G2553上搭建一个简单的HTTP服务器,结果发现在XP系统下可以访问,在Win7下不能访问,非常奇葩的问题. 通过抓包,如下图,计算机(IP地址为192.168. ...
- WinSock 异步I/O模型 转载
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的.Windows操作系统提供了五种I/O模型,分别是: ■ 选择(select):■ 异步选择(WSAAsyncSelect) ...
- Win7 下,离线安装 Android Studio 1.0.1 的方法
此教程没有亲自动手试过,先保存在这里 http://download.csdn.net/detail/tuobaxiao2008/8268281
- 搬瓦工vps搭建vpn
一.下载centos6一键安装包 wget --no-check-certificate https://raw.githubusercontent.com/teddysun/across/maste ...
- sublime支持显示中文
Sublime Text 2是一个非常不错的源代码及文本编辑器,但是不支持GB2312和GBK编码在很多情况下会非常麻烦.不过Sublime Package Control所以供的插件可以让Subli ...