标签:
检索一个并不存在的成员属性的值,将返回undefined
flight.status //undefined
|| 运算符可以用来填充默认值
var status = flight.status || "unknown";
尝试从undefined的成员属性中取值,将会报错TypeError。这时可以通过&&运算符来避免错误
flight.equipment //undefined flight.equipment.model //Throw "TypeError" flight.equipment && flight.equipment.model //undefined
对象通过引用来传递。他们永远不会被复制。
var a = {}, b = {}, c = {}; //a,b,c每个都引用一个不同的空对象 var a = b = c = {}; //a,b,c都引用同一个空对象
如果我们尝试去获取对象的某个属性值,但该对象并没有此属性名,那么Javascript会试着从原型对象中获取属性值。
如果哪个原型对象也没有该属性,那么再从它的原型中查找。以此类推,直到最后到达终点 Object.prototype。
如果想要的属性完全不存在于原型链中,那么结果就是undefined值。
这个过程称为委托。
//反射机制指的是程序在运行时能够获取自身的信息。
//如:一个对象能够在运行时知道自己有哪些方法和属性。
检查对象并确定对象有什么属性是很容易的事情。
typeof操作符对确定属性的类型很有帮助:
typeof flight.number //‘number‘ typeof flight.status //‘string‘ typeof flight.manifest //‘undefined‘
注意原型链中的任意属性都会产生值:
typeof flight.toString //‘function‘ typeof flight.constructor //‘function‘
有两种方法去处理这些不需要的属性:
第一个是检查并丢弃值为函数的属性。
第二种是使用hasOwnProperty方法:
如果对象拥有独有的属性,它将返回true,hasOwnProperty方法不会检查原型链。
flight.hasOwnProperty(‘number‘); //true flight.hasOwnProperty(‘constructor‘); //false
for in 语句可以枚举所有的属性——包括函数和原型中的属性。最好用for代替之。
以特定顺序枚举对象的属性:
var i; var properties = [ ‘first-name‘, ‘middle-name‘, ‘last-name‘, ‘profession‘ ]; for(i=0; i<properties.length; i++){ document.writeln(properties[i] + ":" + another_stooge[properties[i]]); }
标签:
原文地址:http://www.cnblogs.com/gallenhu/p/4571107.html