对象基础
一. javascript的数据类型: 对象类型(复杂数据类型) String类型(字符串类型) Number类型(数字类型)
Boolean(布尔类型) Undefined(未定义类型) Null(空型)
二. 对象
1. 对象的概念: 对象是一组原始数据类型或引用类型(方法)的序列, 这个数列是以键值对的形式存储,序列中的每一项 被称之为属性或方法(行为),且每一个属性名必须是唯一的.
对象的用途: 开发人员会经常使用到对象数据类型,对象数据类型用来存储数据或是创建自定义函数
2. 创建一个简单的对象
var person = {
name:"Tom",
age : 20,
30 : 10,
sayname:function(){
console.log("I‘m" + this.name);
}
}
取值:
console.log(person.name); //返回Tom; 获取name这个属性的值
console.log(person["30"]); //返回10; 获取30这个属性的值
3. 属性名可以是字符串或数字,如果属性名是数字,那么在调用时(取值),需用[]中括号,里面加""双引号来取值
var person = {
10:15
30:35,
sayname:function(){
console.log("I‘m" + this["10"]);
}
}
取值:
console.log(person["10"]); //返回15; 获取"10"这个属性的值
console.log(person["30"]); //返回10; 获取"30"这个属性的值
4. 原始数据类型 和 引用数据类型
1. 原始数据类型是以值的形式直接将值存储到变量里(自我理解:每个变量都被分配了不同的内存区域):
例: var person = "Tom";
var other = person;
person = "Nicy";
console.log(person); //返回 "Nicy"
console.log(other); //返回"Tom";
由上看出: 即使把person的值修改后,other的值还是以前存储的那个值.
2. 引用数据类型是将一个地址值(该对象属性的地址)存储到变量里,这个变量指向的是这个对象属性的内存空间:
例: var person = {name:"Tom"};
var other = person;
person.name = "Nicy";
console.log(person.name); //返回 "Nicy"
console.log(other.name); //返回 "Nicy"
解释: person/other 这两个变量都存储的是{name:"Tom"}这个对象属性的存储空间,即
指向的都是同一块内存区域,这块内存区域存储了一个匿名对象,其有着name的属性.
三. 对象数据类型的属性所具有的特性
对象数据类型: 每个数据属性除了具有键值对的特性外,还有其他三个特性(这三个特性的初始值都为true).
为一个对象添加属性的写法: Object.definProperty(person,"name",{
configurable:true, //设置person这个对象的name属性的值为可修改的
value:"Tom"
});
注意: 设置属性时,里面的语句用,逗号隔开,最后一条语句的后面不写逗号;Object的小括号后要有;分号
1. 可配置性(configurable):指明该属性是否可被删除 ; (设置为true,可被删除; 设置为false,不可被删除;),
删除属性(比如name属性)的写法: delete person.name
例: Object.definProperty(person,"name",{
configurable:true, //设置person这个对象的name属性可被删除
value:"Tom"
});
console(person.name);//输出"Tom"
delete person.name; //因为configurable被设置为true,代表name属性可被删除,
这里调用了delete删除方法,故name这个属性被删除了.
console(person.name);//因为上一句已把name属性删除,此时person里没有name这个属性了,故不再打印.
2. 枚举性(enumerable): 指明该属性能否在for/in中被遍历到;(设置为true,该属性可被遍历到,并被返回;
设置为false,该属性不能被遍历到,即被隐藏起来了), for/in的写法:
for(var X in person){ console.log(x + ":" + person[x]);} ---- 这个for/in就相当于以前学习的for循环,X是被遍历到的person这个对象的各个属性,若要返回属性的值,写法为person[X].
例: Object.definProperty(person,"name",{
enumerable:true, //设置person这个对象的name属性可在for/in中返回
value:"Tom"
});
Object.definProperty(person,"age",{
enumerable:false, //设置person这个对象的age属性不能再for/in中被返回(将age属性隐藏起来了)
value:20
});
for(var X in person){
console.log(X + ":" + person[X]);
}
for/in 的 输出结果为: name:"Tom"
因为age属性的enumerable的值设置为false,表示在for/in里不能返回age,即把age属性隐藏起来.
3. 可写性(writable): 指明该属性能否被修改; (设置为true,该属性的值可被修改;设置为false,该属性的值不可被修改)
例: Object.definProperty(person,"name",{
writable:true, //设置person这个对象的name属性的值可被修改
value:"Tom"
});
Object.definProperty(person,"age",{
writable:false, //设置person这个对象的age属性的值不可被修改
value:20
});
person.name = "Nicy";
person.age = 30;
console.log(person.name); //返回"Nicy",name属性的值修改成功
console.log(person.age); //返回20, age属性的值还是原值,没被修改掉
说明: name属性的writable设置的为true,故name属性的值可被修改;
age属性的writable设置的为false,故age属性的值不可悲修改.