JavaScript的数据类型——对象
JavaScript的数据类型都已经很熟悉了:
Undefined、Null、Number、String、Boolean.
但仅仅是这些肯定是不够的,好在JavaScript还是想方设法使用这集中基本类型实现了对各种问题的灵活处理。
一、生成对象
JavaScript支持对象,而且支持多种对象的创建方式,如:
(一)使用new Object()的方式
<script type="text/javascript">
var myData=new Object();
myData.name="xxx";
myData.age=23;
console.log("name="+myData.name);
console.log("age="+myData.age);
</script>
new Object()是创建了一个对象,但在执行myData.name="xxx";
这条语句之前,myData是没有name这个属性的。
(二)使用对象字面量的方式
<script type="text/javascript">
var myData={
name : "xxx",
age : 25
};
console.log("name="+myData.name);
console.log("age="+myData.age);
</script>
使用这种对象字面量的方式,可以在得到一个对象的同时就定义了它的属性。
属性和值之间用冒号(:)分隔;
每个属性之间用逗号(,)分隔。
但要注意:
为了确保不出问题(大多浏览器的兼容性),最后一个属性后面一定不要有逗号!
(三)访问对象里的属性
访问对象里的属性很简单,正如使用对象字面量的方式里的方式一样,这种风格相信每一个程序员都很熟悉。
但除此之外,还可以使用这种方式:
<script type="text/javascript">
var myData={
name : "xxx",
age : 23
};
console.log("name="+myData["name"]);
console.log("age="+myData["age"]);
</script>
二、对象中定义函数
对象中会有它的属性,在Javascript中,这个属性也可以作为函数存在。
<script type="text/javascript">
var myData={
name : "xxx",
age : 25,
printMessage : function(){
console.log("name="+this.name);
console.log("age="+this.age);
}
};
myData.printMessage();
</script>
如上,printMessage是myData对象的一个属性,但printMessage的属性值是一个函数,那么,它就是myData对象的一个方法。
注意:
在函数内引用对象的属性,必须使用this关键字,否则得到Can't find variable
异常。
三、迭代对象属性
使用myData["属性名"]
这种风格来访问看似奇怪,类似与数组索引,但中括号中填写的却又不是索引数值,而是属性名。但这种风格其实也是经常用到的,比如JS中的增强for.
<script type="text/javascript">
var myData={
name : "xxx",
age : 25,
printMessage : function(){
console.log("name="+this.name);
console.log("age="+this.age);
}
};
for(var a in myData){
console.log(myData[a]);
}
</script>
在这个for循环中,每次迭代,都会把myData的属性名以字符串的形式赋给a, 如:name
、age
、printMwssage
, 而myData[a], 其实就是myData["name"]
、myData["age"]
、myData["printMwssage"]
.
这上面这个例子中,连带myData里面的函数也一起迭代了,控制台内容如下:
xxx
25
function (){
console.log("name="+this.name);
console.log("age="+this.age);
}
四、对象中属性与方法的增删改查
即使是使用对象字面量的方式定义对象,也可以继续添加、删除对象中的属性和方法。
(一)给对象添加新属性、方法
<script type="text/javascript">
var myData={
name : "xxx",
age : 25,
printMessage : function(){
console.log("name="+this.name);
console.log("age="+this.age);
}
};
myData.day = "Monday";
myData.printDay = function(){
console.log("day="+this.day);
}
</script>
(二)检查对象中是否有某属性、方法
<script type="text/javascript">
var myData={
name : "xxx",
age : 25,
printMessage : function(){
console.log("name="+this.name);
console.log("age="+this.age);
}
};
var hasPrintMessage = "printMessage" in myData; //返回true或false
</script>
(三)删除对象的属性、方法
<script type="text/javascript">
var myData={
name : "xxx",
age : 25,
printMessage : function(){
console.log("name="+this.name);
console.log("age="+this.age);
}
};
delete myData.printMessage;
</script>