13.
Object对象
var o = new Object(); // {}; {name : "Jeffrey"}
o["name"] = "Jeffrey";
与下面的是等价的
var o = new Object() {name : "Jeffrey"}
object对象可以用作字典,
function useForInStatement()
{
var dict = new Object();//设置一个字典,
for (var i = 0; i < 10; i++)
{
var key = "key_" + i;
dict[key] = Math.random();
}//创建字典里面的内容
delete dict["key_5"];//从字典中删除其中一个对象
delete dict.key_4;
//从字典对象中删除一个对象,两种方法效果一样。
for (var key in dict)
{
display("Key: " + key + ", Value + " + dict[key]);
}//将字典里面的内容输出。
}
14.Array对象
构造Array对象
new Array():空数组
new Array(3)长度为3的数组
new Array(1,"Hello"):构造有两个元素的数组
Array.prototype
.length属性:数组的长度,可读写
.toString()/toLocaleString()方法
--返回逗号分割的字符串
--两者的区别是得到每个对象字符串的方式
.concat()方法
--返回一个新数组,保存了原数组所有元素和所有参数
.push
--在数组尾添加一个或多个元素
.pop方法:
--从数组尾去除并返回元素
.shift方法
--从数组头去除并返回元素
.unshift方法
--在数组头添加一个或多个元素
.join(sep)方法
--返回以sep作为分割符得到一个连接所有元素的字符串
--StringBuilder的基础,可以为IE加快字符串拼接速度
.reverse()方法:将数组内所有元素逆转。
.sort(compareFunction)方法
--参数为了一个方法,用于比较两个元素
--省略了参数则直接使用<,==,>比较两个元素
.slice(start,end)方法
--返回新数组,不影响旧数组
--包含从下标start开始到下标end-1的元素
--如果省略end 则包含从下标start开始至末尾的所有元素
--如果参数为负数,则表示数组的"倒数"第几个下标,
--如果start元素在end元素之后或相同,则返回空数组
.splice(start,deleteCount[])
--最灵活的方法,影响当前数组
--从下标start的元素开始,删除deleteCount个元素,并在当前start位置开始插入剩余元素
--删除元素:splice(2,1)
--插入元素:splice(2,0,"Hello","World")
--替换元素:splice(2,1,"Hello","World")
<script language="javascript" type="text/javascript">
function display(text)
{
document.getElementById("info").innerHTML += (text + "<br />");
}
Array.prototype.display = function()
{
window.display("a: " + this);
}
//display 显示内容
var a = new Array(1, 2, 3, 4, 5); // a = [1, 2, 3, 4, 5];
display("Array initialized");
a.display();
//构造新数组
display("a.push(6, 7)");
a.push(6, 7);
a.display(); // [1, 2, 3, 4, 5, 6, 7]
//添加元素
display("a.shift(): " + a.shift());
a.display(); // [2, 3, 4, 5, 6, 7]
//从头去除元素
display("a.unshift(8)");
a.unshift(8);
a.display(); // [8, 2, 3, 4, 5, 6, 7];
//在头部添加元素
display("a.pop();" + a.pop());
a.display(); // [8, 2, 3, 4, 5, 6];
//从数组尾去除元素
display("a.concat(9, 10): " + a.concat(9, 10)); // [8, 2, 3, 4, 5, 6, 9, 10];//拼接字符串,且不影响原数组
a.display(); // [8, 2, 3, 4, 5, 6]
display("'[' + a.join('][') + ']': " + '[' + a.join('][') + ']'); // [8][2][3][4][5][6];//拼接数组
display("a.slice(2, 5): " + a.slice(2, 5)); // [3, 4, 5]
display("a.slice(2, -2): " + a.slice(2, -2)); // [3, 4]
a.display();
display("a.splice(3, 2)");
a.splice(3, 2);
a.display(); // [8, 2, 3, 6],删除元素
display("a.splice(2, 0, 7, 8)");
a.splice(2, 0, 7, 8);
a.display(); // [8, 2, 7, 8, 3, 6],插入元素
display("a.splice(3, 1, 9, 10)");
a.splice(3, 1, 9, 10);
a.display(); // [8, 2, 7, 9, 10, 3, 6]
display("a.reverse()");
a.reverse();
a.display(); // [6, 3, 10, 9, 7, 2, 8],逆转元素
display("a.sort()");
a.sort();
a.display(); // [10, 2, 3, 6, 7, 8, 9]//对元素进行排序
display("a.sort(function(x, y){ return y - x; });");
a.sort(function(x, y){ return y - x; });
a.display(); // [10, 9, 8, 7, 6, 3, 2];
</script>
<title>Array forEach</title>
<script language="javascript" type="text/javascript">
function method(elt, index, array)
{
this.result += "[" + index + ". " + elt + "] ";
}
var items = "I am Jeffrey Zhao".split(" ");
var obj = {result : ""};
Array.forEach(items, method, obj);
alert(obj.result);
</script>
15.Error对象
function对象
Boolean对象
Microsoft AJAX Library中提供的唯一扩展
parse静态方法
Boolean.parse("true") // 返回true
Boolean.parse("fAlSe") // 返回false
16.Number原生类型
整数表示法
var num = 50; // 10进制表示法
var num = 060; // 48,8进制表示法
var num = 0xFF; // 255,16进制表示法
浮点数表示法
var num = 5.0;
var num = 3.2e9; // 3.2*10^9,科学计数法
浮点数的范围
MAX_VALUE
MIN_VALUE
极值
POSITIVE_INFINITY
NEGATIVE_INFINITY
Not an Number(NaN)
parseInt32(number,10);//把一个数字转换为整型,10进制数,必须把第二个参数10加上,否则容易出错
<script language="javascript" type="text/javascript">
function display(text)
{
document.getElementById("info").innerHTML += (text + "<br />");
}
display("Max Value = " + Number.MAX_VALUE);
//Max Value = 1.7976931348623157e+308
display("Min Value = " + Number.MIN_VALUE);//Min Value = 5e-324
display("--------------");
display("Positive Infinity = " + Number.POSITIVE_INFINITY);//Positive Infinity = Infinity
display("Negative Infinity = " + Number.NEGATIVE_INFINITY);//Negative Infinity = -Infinity
display("1 / 0 = " + (1 / 0))//1 / 0 = Infinity
display("Max Value * 10 = " + (Number.MAX_VALUE * 10));//Max Value * 10 = Infinity
display("Max Value + 10 = " + (Number.MAX_VALUE + 10));//Max Value + 10 = 1.7976931348623157e+308
display("Infinity / 10 = " + (Number.POSITIVE_INFINITY / 10));//Infinity / 10 = Infinity
display("--------------");
display("NaN = " + Number.NaN);//NaN = NaN
display("parseInt('ABC') = " + parseInt('ABC'));//parseInt('ABC') = NaN
display("3 - 'ABC' = " + (3 - "ABC"));//3 - 'ABC' = NaN
display("(NaN == NaN) = " + (NaN == NaN));//(NaN == NaN) = false
display("(NaN != NaN) = " + (NaN != NaN));//(NaN != NaN) = true
display("isNaN(NaN) = " + isNaN(NaN));//isNaN(NaN) = true
</script>
17.
Date原生类型
UTC时间:国际标准时间
GMT, Greenwich Mean Time
表示日期和时间
一个数字,表示相对于UTC时间1970年1月1日0时整的毫秒数偏移量
每个Date对象存储的永远只是一个数字
时间只有一个,时差是表现上的概念
Date.prototype.getTimezoneOffset()
获得时差的分钟数
var d1 = new Date();表示当前时间的对象(时差是表现上的概念)
var d2 = new Date(0);表示UTC时间1970年1月1日0时整
var d3 = new Date(2007, 5, 6);本地时间2007年6月6日0时整,月从0开始(0到11表示一月到十二月)
var d = new Date(Date.UTC(2007, 5, 6));表示UTC时间2007年6月6日0时整
String原生类型
.split(str):分割字符串至数组
.substring(start[,end])
--得到子字符串
--从下标start开始,到下标end-1为止
--如果没有提供end,则是整个字符串
.slice方法
--与substring方法功能几乎相同
--如果start小于零,则表示倒数第N位(start+length),end也一样
.split(str):分割字符串至数组
<div id="info"></div>
<script language="javascript" type="text/javascript">
function display(text)
{
document.getElementById("info").innerHTML += (text + "<br />");
}
display(String.format("Today is {0}.", new Date()));
//Today is Fri Sep 26 16:52:21 UTC+0800 2008.
display(String.localeFormat("今天是{0:dddd}", new Date()));//今天是星期五
</script>
18.命名空间,类,接口、接口
命名空间
.合理的组织大量的类型
--使开发人员能够方便地找到他们需要的类型
--并非仅仅避免命名冲突
.可重复注册
--每个独立的脚本模块前都要注册命名空间以保证命名空间的存在
Type.registerNamespace("MyNamespace");
类
.定义步骤
-定义构造函数
-定义成员
-注册类
.类的构造函数即为function定义
.通常用于初始化域变量
.私有成员使用下划线开头(无法真正封装)
-this._myPrivateField;
_this._myPrivateMethod();
构造函数
Type.registerNamespace("MyNamespace");
MyNamespace.MyClass=function(param1,...)
{
this._myField=null;
}
类-定义方法
.基于prototype定义
MyNamespace.MyClass.prototype={
myMethod1:function(){...},
myMethod2:function(){
this.myMethod1();//this保留字不可少
}
}
类-定义属性
.Microsoft AJAX Library的面向对象类型系统将add_和set_开头的方法认作属性
.避免定义只定属性,使用某个方法替代
类-注册类
MyNamespace.MyClass.registerClass('MyNamespace.MyClass');
类-抽象类
.包含抽象方法的类即为抽象类
MyNamespace.MyClass.prototype{
this._myMethod=function(){
throw Error.notlmplemented();
}
}
类-继承
.调用父类的构造函数
--没有父类的类可以省略这步
--有父类的类必须调用父类的构造函数,否则会失去继承效果
MyNamespace.MyClass=function(){
MyNamespace.MyClass.initializeBase(this,[param1,...]);
}
注册类时提供父类
可以直接以普通方式实现父类的抽象成员
MyNamespace.MyClass.registerClass(
'MyNamespace.MyClass',MyNamespace.MyParentClass);
接口
.与类的定义基本相同
.构造函数抛出异常
.注册接口时使用registerInterface方法
.接口无法继承其他接口
19.异步通讯层的组成
.WebRequest类
--收集(存储)请求信息
.WebRequestExecutor类
--发送请求 反馈服务端回复的结果
.XMLHttpExecutor
--封装了XMLHttpRequest的Executor
.WebRequestManager类
-用于管理异步通讯层与服务端的通信
异步通讯层组件协作过程
.WebRequest被构造并调用invoke方法
--WebRequestManager确定Executor
--触发WRM的invokingRequest事件
--执行Executor的executeRequest方法
.Executor返回/超时或被取消
--执行WebRequest的 completed方法
.触发WRM的completedRequest事件
.触发WebRequest的complete事件
实现ScriptReferenceExecutro
-aborted
-responseAvailable
-responseData
-started
-statusText
-timedOut
-xml
/
Forms Authentication的使用
.ASP.NET2.0中对于简化了FormAuthentication的使用
-FormsAuthentication表态类
.可以使用最常见的ASP.NET验证来保护WebService
-FormsAuthentication
身份验证功能login()方法
Sys.Service.AuthenticationService.login(
userName,//用户名
password,//密码
isPersistent,//是否生成持久Cookie
customInfo,//预留字段
redirectUrl,//登陆成功后跳转目标
loginCompletedCallback,//身份验证完成回调函数
failedCallback,//身份验证出错回调函数
userContext//用户任意指定的上下文对象
)
function loginCompletedCallback(
validCredentials,//身份验证是否成功
userContext,//用户随意指定的上下文
methodName//即"...login"
){...}
function failedCallback(
error,//错误对象
userContext,//用户随意指定的上下文
methodName//即"...login"
){...}
.注销功能 logout方法
Sys.Service.AuthenticationService.logout(
redirectUrl,//注销后跳转页面
logoutCompletedCallback,//注销成功回调函数
failedCallback,//注销失败回调函数
userContext//用户任意指定的上下文对象
)
function logoutCompletedCallback(
validCredentials,//身份验证是否成功
userContext,//用户随意指定的上下文
methodName//即"...logout"
){...}
function failedCallback(
error,//错误对象
userContext,//用户随意指定的上下文
methodName//即"...logout"
){...}
//
Authentication Service的实现