码迷,mamicode.com
首页 > 编程语言 > 详细

Javascript语言精粹

时间:2015-06-12 12:59:59      阅读:162      评论:0      收藏:0      [点我收藏+]

标签:

检索

检索一个并不存在的成员属性的值,将返回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]]);
}

  

 

Javascript语言精粹

标签:

原文地址:http://www.cnblogs.com/gallenhu/p/4571107.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!