参考 Javascript密码花园 http://www.jb51.net/onlineread/JavaScript-Garden-CN/
对象 {}
null 和undefined 不是对象,其他的都是对象。* 需要注意的是数字直接量,因为javascript数字直接量采用浮点型
所以类似 2.tostring() 会出错, 而2..toString() 则是正常的(ECMAScript3,暂不知道5有没有针对这个问题做处理),但是可以采用(2).toString()解决这个问题
对象的创建
有以下三种形式:
1.var foo = Object.create(Object.prototype);
Object.create(null).toString() 会报错,因为创建了一个空对象。
2.var foo = {};
3.var foo = new Object();
属性的查询与设置
有两种方式可以用来访问对象的属性,(.)点操作符和( [ ] )中括号操作符。
var foo = {name:Jocelyn};
foo.name; //Jocelyn
foo['name'] ; // Jocelyn
两种语言是等价的但是数组运算符可以用于动态设置属性和属性名不是有效的变量名的情况(ECMAScript3点操作符后不允许是保留字,ECMAScript5才对此放宽了限制),看一个例子
var address = “”;
for(var i = 0; i < 4; i++) {
address += customer[‘address' + i];
}
此处就可以配合其他变量来动态的设置值和取值了。
查询不存在的属性不会报错,.查询属性的对象不存在的情况下会报错
避免错误的方法
var len = foo && foo.name && foo.name.length //利用&&运算符的短路属性
设置属性报错的情况有如下几种:
1.给只读属性赋值
2.o是P中继承来的属性,不能通过设置自身同名属性去覆盖只读属性
3.对象为不可扩展
对象继承
对象是基于原型链的继承 ,只在属性