虽然执行环境的类型总共只有两种——全局和局部(函数),但还有其他方法延长作用域链,有些语句可以在作用域链的前端临时增加一个变量对象,执行后会被移除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的更多相关文章

  1. JavaScript高级程序设计61.pdf

    JSON对象 早期的JSON解析器就是使用JavaScript的eval()函数,ECMAScript5对解析JSON的行为做出了规定,定义了全局对象JSON. JSON对象有2个方法:stringi ...

  2. JavaScript高级程序设计60.pdf

    错误处理 try-catch语句 try{ //可能会导致错误的代码 }catch(error){ //在错误发生时如何处理 } error是一个包含着错误信息的对象,它有一个message属性,保存 ...

  3. JavaScript高级程序设计58.pdf

    15章 使用Canvas绘图 略 16章 HTML5脚本编程 HTML5规范了新的HTML标记和JavaScript API,以便简化创建动态Web界面的工作 跨文档消息传递 简称XDM,指来自不同域 ...

  4. JavaScript高级程序设计57.pdf

    表单序列化 首先了解一下浏览器如何将数据发送给服务器 对表单字段的名称和值进行URL编码,使用和号(&)分隔 不发送禁用的表单字段 只发送勾选的复选框和单选按钮 不发送type为“reset” ...

  5. JavaScript高级程序设计55.pdf

    输入模式 HTML5为文本字段新增了pattern属性,这个属性的值是一个正则表达式,用于匹配文本框中的值 例如,只想在允许在文本字段中输入数值 <input type="text&q ...

  6. JavaScript高级程序设计54.pdf

    过滤输入 对于一些浏览器,可以使用正则表达式里的text()测试用户按下的按键,Firefox和safari(3.1版本之前)会对向上向下.退格键和删除键触发keypress事件,在Firefox中, ...

  7. JavaScript高级程序设计53.pdf

    共有的表单字段方法 每个表单字段都有两个方法:focus()和blur(),其中focus()用于将浏览器焦点设置到表单字段,激活表单字段.可以侦听页面的load事件 EventUtil.addHan ...

  8. JavaScript高级程序设计52.pdf

    表单脚本 表单的基础知识 在HTML中,表单是由<form>元素表示的,在Javascript对应的是HTMLFormElement类型,它继承自HTMLElement,因此具有与其他HT ...

  9. JavaScript高级程序设计50.pdf

    hashchange事件 HTML5新增了hashchange事件,以便在URL的参数列表(及URL中“#”号后面的所有字符串)发生变化时通知开发人员,之所以新增这个事件,是因为在Ajax应用中,开发 ...

  10. JavaScript高级程序设计49.pdf

    HTML5事件 contextmenu事件 contextmenu事件是冒泡的,可以将事件处理程序指定到document,这个事件的目标是用户操作的元素,在兼容DOM的浏览器中使用event.prev ...

随机推荐

  1. Android开发手记(22) 传感器的使用

    Android的传感器主要包括八大传感器,他们分别是:加速度传感器(accelerometer).陀螺仪(gyroscope).方向传感器(orientation).磁力传感器(magnetic fi ...

  2. SQL小细节

    平时有些小细节,不留意的话很容易得到错误的答案,我们来看下下面的代码,看看你是否能答对呢? ) ,) SELECT @str = '中国CH',@info='MyTest' SELECT [字符串]= ...

  3. LIB库加载方法-引用百度百科

    LIB库加载方法,有三种,如下: 1.LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中\"Add Files to Project\ ...

  4. oracle session 相关优化

    导读: 同学们是不是都用遇到过这种情况,一个业务系统开发期业务并发量只是估算一个值,而系统上线后这个并发量可能会出现溢出或是不够的   情况.在这种情况下我们DBA怎么给出合理的性能优化建议呢?本文就 ...

  5. Quartz-2D绘图之图形上下文详解

    上一篇文章大概描述了下Quartz里面大体所包含的东西,但是对具体的细节实现以及如何调用相应API却没有讲.这篇文章就先讲讲图形上下文(Graphics Context)的具体操作. 所谓Graphi ...

  6. HDU1878欧拉回路

    这道题WA了好多次.测试数据感觉有点问题-- 并查集啊,必须有. #include<stdio.h> #include<string.h> int ad[1003]; int ...

  7. C# 禁止 Webbrowser 控件的弹出脚本错误对话框

    当IE浏览器遇到脚本错误时浏览器,左下 角会出现一个黄色图标,点击可以查看脚本错误的详细信息,并不会有弹出的错误信息框.当我们使用 WebBrowser控件时有错误信息框弹出,这样程序显的很不友好,而 ...

  8. oracle新建表空间及用户

    本文介绍命令模式(管理员权限): 1.以管理员权限打开命令控制台,输入下面命令: Sqlplus sys/管理员账户名称(就是DBA账户) as sysdba;(记得分号哦,有时没有的话会报错) 2. ...

  9. div section article aside的理解

    div 是一个大的容器 内部可以包含header main nav aside footer等标签 没有语义,多用于为脚本添加样式 section的语义比div语义强些,用于主题性比较强的内容,比如一 ...

  10. dotnet core多平台开发体验

    前言 随着net core rc2的发布,园子里面关于net core的入门文章也也多了起来,但是大多数都是在一个平台上面来写几个简单的例子,或者是在解释代码本身,并没有体现说在一个平台上面创建一个项 ...