理解JavaScript对象
理解JavaScript对象
对象是JavaScript的基本数据类型。对象是一种复合值:将很多值(原始值或者其他对象)聚合在一起。
JavaScript对象不仅可以保持自有的属性,还可以从原型对象继承属性。对象的方法通常是继承的属性。原型式继承是JavaScript的核心特征。
JavaScript对象是动态的——可以新增属性也可以删除属性,除了字符串,数字,true,false,null和undefined之外(当使用他们的属性方法时,会隐式的变成包装对象),JavaScript中的值都是对象。
对象是可变的,我们通过引用而非值来操作对象,如果变量x是指向一个对象的引用,那么执行代码var y=x;变量y也是指向同一个对象的引用,而非这个对象的副本,通过变量y修改这个对象亦会对变量x造成影响。
JavaScript规定,如果行首是大括号,一律解释为语句(即代码块)。如果要解释为表达式(即对象),必须在大括号前加上圆括号。
对象的最常见的用法是:
创建(create),设置(set),查找(query),删除(delete),检测(test),枚举(enumerate)它的属性。
1.对象创建:
对象的生成方法,通常有三种方法。除了像上面那样直接使用大括号生成({}),还可以用new命令生成一个Object对象的实例,或者使用Object.create方法生成。
第一种:对象直接量
var point={x:0,y:0;}
第二种:通过new后面加上构造函数创建对象
var o=new Object();
第三种:通过Object.create方法生成
var o=Object.create(null);//这个方法可以传入原型对象
总结:一般来说,第一种采用大括号的写法比较简洁,第二种采用构造函数的写法清晰地表示了意图,第三种写法一般用在需要对象继承的场合。
2.对象属性的设置与查询
查询
o.x或者o["x"]
设置
o.x=2或者o["x"]=2
3.属性的删除
delete o.x
delete只能删除自由属性,不能删除继承属性
4.属性的检测
javascript对象可以看作属性的集合,我们经常会检测集合中成员的所属关系,判断某个属性是否存在于某个对象中。
(1)in运算符
运算符左侧是属性名,右侧是对象。如果对象的自有属性或继承属性中包含这个属性则返回true。
"x" in o
(2)hasOwnProperty()
用于检测给定的名字是否是对象的自有属性。对于继承属性它将返回false。
o.hasOwnProperty("x")
(3)propertyIsEnumerable()
propertyIsEnumerable()是hasOwnProperty()的加强版,只有检测到是自有属性且这个属性的可枚举性为true时它才返回true
o.propertyIsEnumerable("x")
5.属性枚举
通过使用for/in循环可以在循环体中遍历对象中所有可枚举的属性(包括自由属性和继承的属性)。对象继承的内置方法不可枚举,但是代码中给对象添加的属性都是可枚举的。
示例:遍历对象的所有可枚举属性
for(property in o){
}
示例:遍历对象的自有属性
for(property in o){
if(!o.hasOwnProperty(property)) continue; //跳过继承的属性
console.log(property);//输出自有属性
}
示例:跳过方法
for(property in o){
if(typeof o[property] === "function") continue; //跳过方法
}