对象——常用操作及方法
2015-10-05 20:48
246 查看
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);//undefied4.检测属性:
通过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。
通过for/in来遍历对象的可枚举属性(包括自有的和继承的属性)。
Object.keys(对象名):返回数组,数组存放对象所有自有的可枚举属性的名称;
Object.getOwnPropertyNames(对象名):返回数组,数组中含所有自有属性的名称。
例: 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);//undefied4.检测属性:
通过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(对象名):返回数组,数组中含所有自有属性的名称。
相关文章推荐
- 重载的定义
- Vim技巧5
- UI 多线程——种类
- Delphi应用程序的调试(1-10)
- [一个经典的多线程同步问题]总结
- UVa 1225 - Digit Counting【打表】
- 冒烟测试
- TreeSet对元素进行排序实现的两种方式
- 文本分类入门(一)文本分类问题的定义
- [Python进阶-5]类的特殊方法
- UVA 11991 Easy Problem from Rujia Liu?
- 简单0-1背包
- UITableView的优化问题
- 单向链表的建立(尾部插入法)
- matlab远程调试
- Android学习笔记(十)BroadcastReceiver初体验
- 素数链
- 第二层第二题:矩阵变换
- <一> 导言
- 播放与暂停UIWebView中视频,并获取的长度与播放进度,