能够经过点(.)或方挂号([])运算符来获取属性的值。javascript
对于点(.)来讲,右侧必须是一个以属性名称命名的简单标识符。对于[]来讲,方挂号内必须是一个计算结果为字符串的表达式。java
var author = book.author;//获得book的'author'属性spa
var title = book['main title'];//获得book的'main title'对象
在ECMAScript 3中,点运算符后的标识符不能是保留字,好比,o.for或o.class是非法的;必须使用方挂号形式访问o['for']。继承
在ECMAScript 5中对此放宽限制。ip
在C/C++一些强类型语言中,对象只能拥有固定数目的属性,而且这些属性名称必须提早定义好。字符串
因为javascript是弱类型语言,在任何对象中均可以建立任意数量的属性。it
-----------------------------------------------------------------------------------------------------------------------------------class
查询一个不纯在的属性并不会报错,若是在对象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