JS语言精粹学习笔记--对象字面量

对象

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   1455“,

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';

如果对像之前没有该属性名,那么该属性名就被扩充到对象中。(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 = {}; //都引用同一空对象。

猜你喜欢

转载自blog.csdn.net/WuLex/article/details/88691367