获取属性
可以通过点(.)或方挂号([])运算符来获取属性的值。
对于点(.)来说,右侧必须是一个以属性名称命名的简单标识符。对于[]来说,方挂号内必须是一个计算结果为字符串的表达式。
var author = book.author;//得到book的'author'属性
var title = book['main title'];//得到book的'main title'
在ECMAScript 3中,点运算符后的标识符不能是保留字,比如,o.for或o.class是非法的;必须使用方挂号形式访问o['for']。
在ECMAScript 5中对此放宽限制。
在C/C++一些强类型语言中,对象只能拥有固定数目的属性,并且这些属性名称必须提前定义好。
由于javascript是弱类型语言,在任何对象中都可以创建任意数量的属性。
-----------------------------------------------------------------------------------------------------------------------------------
查询属性
查询一个不纯在的属性并不会报错,如果在对象o自身的属性或继承的属性中均未找到属性,返回undefined。
但是,如果对象不存在,那么试图查询这个不存在的对象的属性就会报错。null和undefined值都没有属性。
当然,给null和undined设置属性也会报类型错误。有一些属性是只读的,不能重新赋值。
book.author = 'abc';
-----------------------------------------------------------------------------------------------------------------------------------
删除属性
delete运算符可以删除对象的属性。delete只是断开属性和宿主对象的关联,而不会去操作属性中的属性
delete book.author;
delete book['main title'];
delete运算符只能删除自有属性,不能删除除继承属性。
---------------------------------------------------------------------------------------------------------------------------------------
检测属性
in运算符、hasOwnPreperty()和propertyIsEnumerable()方法来检测属性。
var o = {x:1};
'x' in o;//true
'y' in o;//flase
'toString' in o;//true
对象的hasOwnProperty()方法用来检测给定的名字是否是对象的自有属性。对于继承属性返回false
o.hasOwnProperty('x');//true
o.hasOwnProperty('y');//false
o.hasOwnProperty('toString');//false,toString是继承属性
对象的propertyIsEnumerable(),只有检测到是自有属性却这个属性的可枚举性为true时才返回true。
除了使用in,另一种更简单的方法是使用'!=='判断一个属性是否是undefined。
o.x!==undefined;//true
o.y!==undefined;//false
o.toString!==undefined;//true