对象
JS的简单数据类型包括:数字、字符串、布尔值(true/false)、null值和undefined,其他所有的值都是对象。数字、字符串、布尔值貌似对象,因为他们拥有方法,但他们是不可变的。JS中的对象是可变的键控集合(keyed collection)。在JS中,数组、函数和正则表达式都是对象,对象也是对象。
对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是包括空字符串在内的任意字符串,属性值可以是除undefined以外的任意值。
JS里的对象是无类型(class free)的。它对新属性的名字和值没有限制,对象适用于汇集和管理数据,对象可以包含其他对象,所以它们很容易表示成树状或图形结构。
JS包含一种原型链的特性,允许对象继承另一个对象的属性。正确地使用它能减少对象的初始化时消耗的时间和内存。(/lpc/-java类的继承咯?)
对象字面量
对象字面量是一种可以方便地按指定的规格创建新对象的表述法。属性名可以是标识符或字符串。这些名字被当作字面量名而不是变量名来对待,所以对象的属性名在编译时才能知道。属性的值就是 表达式。
对象字面量提供了一种非常方便的创建新对象的表示法。一个对象字面量就是包围在一对花括号中的零或多个”名/值“对。对象字面量可以出现在任何允许表达式出现的地方。
var empty_object = {};
var stooge = {
"first-name" : "Jerome",
"last-name":"Howard"
}
属性名可以是包括空字符串在内的所有字符串。在对象字面量中,如果属性名是一个合法的Javascript标识符且不是保留字,则并不强制要求你用引号括住。所以上面的代码中”first-name“必须用”“括起来,而first_name就不用(因为中间是下划线)。逗号用来分割多个“名/值”对。
属性的值可以从包括另一个对象字面量在内的任意字表达式获得。对象可以是嵌套的:
var flight= {
airline : "Oceanic",
number : 815,
departure : {
TATA : "SYD",
time : "2004-09-22 14:55"
city :"Sydeny"
},
arrival : {
TATA : "LAX",
time : ”2004-09-22 14:55“,
city : "Los Angeles"
}
}
检索
要检索对象厘面包含的值,可以采用在[]后缀括住一个字符串表达式的方式。如果字符串表达式是一个字符串字面量,而且是一个合法的Javascript标识符且不是保留字,那么也可以用 . 表示法。
stooge ["first-name"] //"Jerome"
flight.departure.TATA //"SYD"
如果检索一个不存在的成员属性的值,将返回undefined。||运算符可以用来填充默认值:
var middle = stooge["middle-name"] || ["none"]; //若不存在middle-name属性,将返回none
尝试从undefined的成员属性中取值将会导致TypeError异常。这时可以通过&&运算符来避免错误。.
flight . equipment //unfefined
flight . equipment //throw"TypeError"
flight . equipment && flight . equipment . model; //undefined
更新
对象里的值可以通过赋值语句来更新。如果属性名已经存在于对象里,那么这个属性的值就会被替换。
stooge['first-name'] = 'Jerome';
如果对像之前没有该属性名,那么该属性名就被扩充到对象中。(/lpc/ js真灵活!!)
stooge[''middle-name'] = 'Lester' ;
stooge.nickname = 'Curly';
引用
对象通过引用来传递。它们永远不会被复制:
var x = stooge;
x.nickname = 'Curly';
var nick = stooge.nickname; //x和stooge指向同一对象,nick为'Curly'。
var a = {},b={},c={}; //a,b和c每个都引用一个不同的空对象。
var a= b = c = {}; //都引用同一空对象。