检索
- 利用||填充对象的默认值
var status = res['status'] || 'unkown'
- 如果res[‘status’]是undefined那么status的值就是’unkown’
- 利用&&避免TypeError错误
- 如果
flight.equipment
已经是undefiled - 我们想获取
flight.equipment.model
就会报TypeError错误 - 利用
flight.equipment && flight.equipment.model
可以预防出现这种错误
原型
- 当创建一个新对象时,可以选择某个对象作为它的原型
- 每个对象都连接着一个原型对象,并且原型对象的属性会被连接其的对象继承
- 简化创建对象时指定原型
var stooge = {
'first-name': 'Jerome',
'last-name': 'Howard'
};
if (typeof Object.beget !== 'function') {
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
}
var another_stooge = Object.create(stooge);
- 更新对象的属性时,不会更新已连接的原型,在检索时才会被用到
if (typeof Object.beget !== 'function') {
Object.create = function (o) {
var F = function () {};
F.prototype = o;
return new F();
};
}
var stooge = {
'first-name': 'Jerome',
'last-name': 'Howard'
};
var another_stooge = Object.create(stooge);
stooge.profession = 'actor';
console.log(another_stooge.profession === 'actor')
another_stooge.profession = 'driver'
console.log(stooge.profession)
console.log(another_stooge.profession)
反射
- 利用typeof可以确定属性的类型,但是原型中的属性一样会被辨认出来,利用hasOwnProperty判断属性是否为对象本身的属性,可以避免typeof读取到原型的属性类型
var stooge = {
'first-name': 'Jerome',
'last-name': 'Howard'
};
var another_stooge = Object.create(stooge);
stooge.profession = 'actor';
console.log(typeof another_stooge.profession)
if (another_stooge.hasOwnProperty('profession')) {
console.log(typeof another_stooge.profession)
}
枚举
- for in可以遍历一个对象中所有的属性名,包括函数和原型中的属性,可以进行过滤,另外for in是无序的,需要有序时不应使用for in
- 过滤方法一hasOwnProperty排除原型中的属性
- 过滤方法二typeof排除函数
减少全局变量的污染
var Vue = {};
Vue.data = {
'first-name': 'Jerome',
'last-name': 'Howard'
};
Vue.flight = {
airline: 'dbdddurex'
};