对象简介
1.对象
ECMA-262把对象(object)定义为“属性的无序集合,每个属性存放一个原始值、对象或函数”。严格来说,这意味着对象是无特定顺序的值的数组。
2.对象的构成
在ECMAScript中,对象由特性(attribute构成),特性可以是原始值,也可以是引用值。如果特性存放的是函数,它将被看作对象的方法(method),否则该特性被看作对象的属性(property)。
3.声明和实例化
对象的创建方式是用关键字new后面跟上实例化的类的名字。
var oObject=new Object();
var oStringObject=new String();
如果构造函数无参数,括号则不是必需的。
4.对象引用
在ECMAJavascript中,不能访问对象的物理表示,只能访问对象的引用。每次创建对象,存储在变量中的都是该对象的引用,而不是对象本身。
5.对象废除
ECMAScript拥有无用存储单元收集程序,意味着不必专门销毁对象来释放内存。当再没有对对象的引用时,称该对象被废除了。运行无用存储单元收集程序时,所有废除的对象都被销毁。每当函数执行完它的代码,无用存储单元收集程序都会运行,释放所有的局部变量,在一些其他不可预知的情况下,无用存储单元收集程序也会运行。
把对象的所有引用都设置为null,可以强制性地废除对象。当变量oObject设置为null后,对第一个创建的对象的引用就不存在了。这意味着下次运行无用存储单元收集程序时,该对象将被销毁。每用完一个对象将其废除 ,来释放内存。
对象字面量
一个对象字面量就是包围在一对花括号中零或多个“名/值”对。对象字谜拿了可以出现在任何允许表达式出现的地方。
//属性名可以是包括空字符串在内的任何字符串
var empty_object = { };
//在对象字面量中,如果属性名是一个合法的JavaScript标识符且不是保留字,则并不强制要求用引号扩住属性名。所以用引号扩朱"first-name"是必需的,但是否括住"first_name"是可选的。
//逗号用来分隔多个"名/值"对。
//JavaScript的标识符中包含连接符(-)是不合法的,但允许包含下划线(_)
var stooge = {
"first-name":"Jone",
"last-name":"Howard"
}
属性的值可以从包括另一个对象字面量在内的任意表达式中获得。
对象是可嵌套的:
var fligt = {
airline:"Ocen",
number:815,
departure:{
IATA:"SYD",
time:"2004-09-23",
city:"Sydney"
},
arrival:{
IATA:"LAX",
time:"2004-09-24 10:42",
city:"Los"
}
};
检索
要检索对象里包含的值,可以采用在[ ]后缀中括住一个字符串表达式的方式。
如果字符串表达式是一个字符串字面量,且是一个合法的JavaScript标识符且不是保留字,也可以用 点( . )语法代替。 优先考虑 点 ( . )语法。
stooge["first-name"]
flight.departure.IATA
若检索一个并不存在的成员属性的值,将范围undefined。
|| 运算符可以用来填充默认值。
var middle = stooge["middle-name"]||"(none)";
var status = fligt.status || "unknown";
//尝试从undefined的成员属性中取值会导致TypeError异常。这时可以通过&&运算符来避免错误。
引用
对象通过引用来传递。它们永远不会被复制。
var x = stooge;
x.name = "Mike";
var nick = stooge.name;
//因为x和stooge是指向同一个对象的引用,所以nick为"Mike"
var a = {}, b = {} , c = {};
//a,b和c每个都引用一个不同的空对象
a=b=c={};
//a,b,c都引用同一个空对象。
原型
每个对象都连接到一个原型对象,并且它可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype,它是JavaScript中的标配对象。
枚举
for in语句可以用来遍历一个对象中的所有属性名。该枚举过程将会列出所有的属性——包括函数和你可能不关心的原型中的属性——所以必须要过滤掉那些你不想要的值。最常用的过滤器是 hasOwnProperty 方法,以及使用typeof来排除函数。
var name;
for(name in another_stooge){
if(typeof anoother_stooge[name] !== 'funciton'){
document.writeln(name+":"+another_stooge[name]);
}
}
属性名出现的顺序是不确定的,若想以特定顺序出现,最好的办法就是完全避免使用for in语句,而是创建一个数组。
删除
delete运算符可以用来删除对象的属性。
它不会触及原型链中的任何对象。
删除对象的属性可能会让来自原型链中的属性透现出来。
即,删除对象属性后会从原型链中寻找。。
减少全局变量污染
为你的应用只创建一个唯一的全局变量。
var MYAPP = { };
//该变量此时变成了你的应用的容器
MYAPP.stooge={
"fitst_name":"Jone",
"last-name":"Mike"
};
时间日期:Date对象
1.定义日期
Date对象用于处理日期和时间。
可以通过new关键字来定义Date对象。
var myDate=new Date();
返回当日的日期和时间,如何使用Date()方法获得当日的日期。
alert(Date())
(1)getTime()
getTime()返回从1970年1月1日至今的毫秒数。
(2)getDay()
数学计算:Math对象
1.Math对象
Math对象的作用是执行普通的算术任务。
Math对象提供多种算术值和函数。无需再使用这个对象之前对它进行定义。
2.算术值
JavaScript提供8种可被Math对象访问的算术值。
(1)常数
(2)圆周率
(3)2个平方根
(4)1/2的平方根
(5)2的自然对数
(6)10的自然对数
(7)以2为底的e的对数
(8)以10为底的e的对数
3.算术方法
除了可被Math对象访问的算术值以外,还有以下几个常用的函数(方法)可以使用。
(1)round():使用Math对象的round方法对一个数进行四舍五入。
(2)random():使用Math对象的random()方法来返回一个介于0和1之间的随机数。
(3)max():使用max()来返回给定的数中较大的数。
(4)min():使用min()来返回给定的数中较小的数。