1.对象属性的访问:
例:
var obj={atr:"hello"};
console.log(obj.atr);
console.log(obj["atr"]);
console.log(obj['a'+'t'+'r']);
上述代码的三种访问方式都是正确的,均会正常的输出hello。
事实上,对象属性的访问有两种方式。一是通过(.),其右侧必须是对象的属性名称(若是保留字,则不可以)。二是通过([]),方括号内的表达式计算结果为字符串,且值就是属性的名 称。
在对象的属性的访问中,若对象的属性不存在,则会返回undefined。
2.对象属性的继承:
对象中的有些属性是自有属性,但有些属性是从原型对象中继承来的。
比如:var obj={x:1},那么,obj就拥有自有属性x以及从原型Object.prototype继承来的属性了。
注:在属性的赋值操作中,总是在原始对像上修改或创建属性,对原型对象的属性并不会修改。
3.删除属性:
delete只能删除对象的自有属性,并不会删除对象的继承属性(即原型对象的属性)。
当删除对象属性成功或删除操作无副作用(比如:删除的对象属性不存在)、delete后不是一个属性访问表达式时,返回值均为true。
例如:
var obj={x:1};
console.log(delete obj.c);//true
console.log(delete 1);//true
console.log(delete obj.x);//true
console.log(obj.x);//undefied
4.检测属性:
通过in、hasOwnProperty()、propertyIsEnumerable()来查询属性。
(1). “属性名” in 对象名:如果对象属性或是继承属性中包含这个属性就会返回true。
比如:
var obj={x:1};
console.log("x" in obj);//true
console.log("y" in obj);//false
console.log("toString" in obj);//true
(2).对象.hasOwnProperty(“属性名”):该函数方法只能检测属性是否为对象的自有属性。
比如:
var obj={x:1};
console.log(obj.hasOwnProperty("x"));//true
console.log(obj.hasOwnProperty("y"));//false
console.log(obj.hasOwnProperty("toString"));//false
(3).对象名.propertyIsEnumerable("属性名"):该方法只能检测对象的自有属性且属性是可枚举的。
例如:
var obj={x:1,y:2};
Object.defineProperty(obj,"y",{enumerable:false});//将obj的y属性设置为不可枚举的
console.log(obj.propertyIsEnumerable("x"));//true
console.log(obj.propertyIsEnumerable("y"));//false,y虽为自有属性,但已经设置为不可枚举
console.log(obj.propertyIsEnumerable("toString"));//false,因为是继承属性且不可枚举
(4).in的特殊用处:区分属性不存在和属性存在但值为undefined。
var obj={y:undefined};
console.log(obj.y===undefined);//true,y属性值为undefined
console.log(obj.x===undefined);//true,x属性不存在
console.log("y" in obj);//true,y属性存在
console.log("x" in obj);//false,x属性不存在
4.枚举属性:
通过for/in来遍历对象的可枚举属性(包括自有的和继承的属性)。
Object.keys(对象名):返回数组,数组存放对象所有自有的可枚举属性的名称;
Object.getOwnPropertyNames(对象名):返回数组,数组中含所有自有属性的名称。