6.JavaScript的对象
1.生成方法
对象是JavaScript的核心对象,也是最重要的数据类型。JavaScript的所有数据都可以被视为对象。
1.1简单的说,对象就是一种无序的数据集合,由若干的键值对构成。
var o={
p:'hello word'
};
上面的代码中,大括号定义了一个对象它被赋值给变量O,这个对象内部的包含一个键值对,p是'键名',hello word是值,键名与值之间用:连接,多个键值对之间用,连接,并且说有的键名都是字符串,所以加不加引号都是可以的,如果键名是数字,将会自动转化为字符串。
1.2生成对象的方法通常有三种,如下:
var o1={};
var o2=new Object();
var o3=Object.create(Object.prototype);
通常用第一种,后面两种,见识浅,没有见过,据说,高高高手才用。
1.3对象的每一个‘键名’又称为属性,他的键值可以是任何数据类型,如果一个属性的值为函数,通常把这个属性称为方法,它可以像函数一样的调用。
var o={
p:123,
m:function (a,b) {
return a+b;
}
}
o.p(1,3);
1.4对象的引用
如果不同的变量名指向同一个对象,那么他们的都是这个对象的引用,也就是说指向同一个内存地址,修改其中一个变量,会影响到其他的所有变量。
var p1={};
var p2=p1;
p1.a=1;
p2.a //1
p2.b=2;
p1.b //2
上面的代码中,p1和p2指向同一个对象,因此其中任何一个变量添加属性,另一个变量可以读写该属性。
注:这一块的东西我也理解的不是很清楚,但是,归根结底就是一个变量的地址指向拷贝,和一个变量的值深度拷贝的问题,下面我会写一篇文章,将将解释清楚。
2.属性的操作
2.1属相的读取
属相的读取有下面的两种方法,如下:
var p={
p:'zhanglei'
};
p.p //zhanglei
p['p'] //zhanglei
使用方括号这种形式,键名必须放到引号里面,不然会被当做变量处理,但是,数字键可以不加引号,应为会自动转换为字符串。
2.2属相的赋值
点和方括号的用算符不仅可以取值,可以赋值。
var p={
p:'zhanglei'
}
p.p='xiaozhang';
p['p']='xiaozhang';
2.3查看一个对象的所有属性
查看一个对象的所有属相,可以使用Object.keys方法。
var o={
name:'zhanglei',
age:25
}
Object.keys(0); //['zhanglei',25]
2.4删除对象属性
用delete命令删除对象的属相,删除成功返回true。
var o = {p: 1};
Object.keys(o) // ["p"]
delete o.p // true
o.p // undefined
Object.keys(o) // []
2.5 in运算符
in运算符用于检查对象是否包含某一个属相,如果包含就返回true,要不返回false。
var p={
p:1
};
'p' in p; //true
in 运算符无法检测对象继承的属性。
2.6 for....in 循环
循环来遍历一个对象的全部属性。
var p={
a:1,
b:2,
c:3
}
for(var i in p){
console.log(p[i]);
}
for---in遍历的是对象所有可遍历的属相,会跳过不可遍历的属相,并且它不仅遍历自身的属相,还遍历继承的属性。
// name 是 Person 本身的属性
function Person(name) {
this.name = name;
}
// describe是Person.prototype的属性
Person.prototype.describe = function () {
return 'Name: '+this.name;
};
var person = new Person('Jane');
// for...in循环会遍历实例自身的属性(name),
// 以及继承的属性(describe)
for (var key in person) {
console.log(key);
}
// name
// describe
2.7with语句
用于操作一个属性的多个属性时,可以提供一些书写的便利。
// 例一
with (o) {
p1 = 1;
p2 = 2;
}
// 等同于
o.p1 = 1;
o.p2 = 2;
// 例二
with (document.links[0]){
console.log(href);
console.log(title);
console.log(style);
}
// 等同于
console.log(document.links[0].href);
console.log(document.links[0].title);
console.log(document.links[0].style);
一般不常用,所以就不赘述了,就当没有这个玩意就可以了。