开头
JavaScript的简单数据类型包括数字、字符串、布尔值(true和false)、null值和undefined值。
其他所有的值都是对象。数字、字符串和布尔值“貌似”对象,因为它们拥有方法,但它们是不可变的。
JavaScript中的对象是可变的键控集合。
对象字面量
一个对象字面量就是包围在一对花括号中的零或多个“名/值”对。其中,属性名可以使包括空字符串在内的任何字符串。
检索
- 检索对象里包含的值,2种方法。
1、stooge[‘time]
2、flight.status
若不存在返回undefined - ||运算符可以用来填充默认值“
var middle = stooge[“name”]||”unknown” - 尝试从undefined的成员属性中取值将会导致TypeError异常。
flight.equip //undefined
flight.equip.model //throw "typeERROR"
flight.equip && flight.equip.model//undefined
引用
var x =stooge;
x.nickname = "Curly";
var nick = stooge.nickname;
//因为x和stooge是指向同一个对象的引用,所以nick为'Curly'
var a={},b={},c={};
//a,b,c每个都引用一个不同的空对象
a=b=c={};
//a,b,和c都引用同一个空对象
原型
所有通过字面量创建的对象都连接到Object.prototype,它是Javascript中的标配对象.
新建对象时,可选择某个对象作为她的原型。通过给Object增加一个create方法。
if (typeof Object.create !=='function"){
Object.create= function (o) {
var F = function (o) {};
F.prototype = o ;
return new F;
};
}
var another_stooge = Object.create(stooge);
原型链接在更新时不起作用。当对某个对象做出改变时,不会触及该对象的原型。
原型链只有在检索值的时候才被用到。
原型关系是一种动态的关系。若添加一个新的属性到原型中,该属性会立即对所有基于该原型的对象可见。
stooge.pro = 'actor'
another_stooge.pro //'actor'
反射
typeof 操作符对确定属性的类型很有帮助。原型链中的任何属性都会产生值。
- hasOwnProperty 若对象哟拥有独有的属性,它将返回true。hasOwnProperty 不会检查原型链。
枚举 for in
for in 语句可用来遍历一个对象中的所有属性名。包括函数和可能不关心的原型中的属性。因此需要hasOwnProperty和typeof来排除函数。属性名出现的顺序是不确定的,因此需要对如何可能出现的顺序有所准备。若想要确保属性以特定顺序出现,最好的办法是避免使用for in,而创建一个数组,在其中以正确的顺序包含属性名:
var i ;
bar properties = [
'first-name'.
'middle-name',
'last-name',
'profession'
];
for (i = 0; i < properties.length; i+=1 ){
document.writeln(properties[i]+":"+
another_stooge[properties[i]]);
}
删除
delete运算符可以用来删除对象的属性。若对象包含该属性,则该属性就会被删除。但它不会触及原型链中的如何对象。
删除对象的属性可能会让来自原型链中的属性透视出来:
anther_stooge.nickname //'more'
//删除another_stooge的nickname属性,从而暴露出原型的nickname属性。
delete another_stooge.nickname;
another_stooge.nickname//'Curely'
减少全局变量污染
为应用创建一个唯一的全局变量:
var MYAPP = { }