3.1 对象字面量 Objects Literals
一个对象字面量就是包围在一对花括号中的零或多个"名/值"对。
3.2 检索 Retrieval
检索对象中包含的值:
stooge["first-name"] //"Joe"
stooge.departure.IATA //"SYD"
- 检索不存在的成员元素的值返回undefined。
- ||运算符可以用来填充默认值:
var middle = stooge["middle-name"] || "(none)" ;
var status = stooge.status || "unknown" ;
- 尝试检索一个undefined值将会导致TypeError异常,这可以通过&&运算符来避免错误。
stooge.equipment //undefined
stooge.equipment.model //throw "TypeError"
stooge.equipment && stooge.equipment.model //undefined
3.5 原型 Prototype
和原型链有关,稍后再记
3.6 反射 Reflection
反射:指可处理未知的对象并获得它们的属性和方法。
typeof操作符对确定属性的类型很有帮助,但是原型链中的属性也会产生一个值,为了处理这些不必要的属性,有两个办法:
- 让程序检查并剔除函数值
- 使用hasOwnProperty方法,它不会检查原型链,如果对象有独立属性,返回true
stooge.hasOwnProperty('first-name') //true
stooge.hasOwnProperty('middle-name') //false
3.7 枚举 Enumeration
for in语句可用来遍历一个对象中的所有属性名,包括原型链中的属性。
最常用的过滤器是hasOwnProperty方法,以及使用typeof来排除函数。
var name;
for(name in another_stooge) {
if(typeof another_stooge[name]!== 'function') {
document.writeln(name+':'+another_stooge[name]);
}
}
3.8 删除 Delete
delete运算符可以用来删除对象的属性,且不会触及原型链中的属性,但是可能会让原型链中的属性浮现出来:
another_stooge.nickname //'Moe'
delete another_stooge.nickname;
//原型链中的nickname属性浮现
another_stooge.nickname //'Curly'
3.9 减少全局变量污染 Global Abatement
全局变量削弱了程序的灵活性,所以应该避免。
- 最小化使用全局变量的一个方法是只定义一个全局变量,这个全局变量此时变成了应用的容器
- 使用闭包也可有效减少全局污染