||运算符来填充默认值
var status = flag.status || "unknown";
&&运算符用来避免错误
//当flag.status为undefined时
//flag.status.first 会 throw TypeError
var firstStatus = flag.status && flag.status.first;
hasOwnProperty()方法不会检查原型链,用于检查对象是否拥有独有的属性
flag.hasOwnProperty('status');//true
flag.hasOwnProperty('toString');//false
for in 语法会枚举对象的所有属性,包括原型中的属性,有必要用hasOwnProperty 或者typeof过滤一下,且 for in 是无序的,若要有序可以用for,且list.length不会获取原型中的字段
var name;
for (name in list) {
if (typeof list['name'] !== 'function') {
...
}
delete可以删除对象的属性,当删除了一个对象的某个属性时,有可能使原型的这个属性透显出来
another_stooge.nickname;//'Moe'
delete another_stooge.nickname;
another_stooge.nickname;//'Curly'来自原型链同名属性