对象的分类:
- 内建对象:由ES标准中定义的对象,在任何的ES的实现中都可以使用。ex:Math,String,Number….
- 宿主对象:由JS的运行环境提供的对象:BOM,DOM。
- 自定义对象:由开发人员自己创建的对象。
对象数据类型的使用
- 创建对象:
- var obj = new Object();
- var obj = { };
上述两者均为创建一个新对象,本质相同。
- 在对象中添加属性(增):
obj.name = “Tom”;
obj.age = 18;
- 删除属性值(删):
delete obj.name;
- 修改属性值(改):
obj.name = “jerry”;
- 读取属性(查):
console.log(obj.name);
检查属性是否存在于对象:console.log(“属性值” in 对象);
ex:console.log(“text” in obj);//返回布尔值
对象属性不强制要求标识符规范,命名无要求,特殊字符及数字命名需要obj[“…”],取也需如此。
var obj = {};
obj["123"] = 789;
var n = "123";
console.log(obj["123"]);
console.log(obj[n]); // 这两个输出效果相同,均为直接读取n的值
var obj = {
name:"Tom" ,
age:18 ,
test:{name:"jerry"} // 在对象里添加对象时,内对象要用":"而不是"="。
};
对象的遍历
Object.keys(obj);
返回对象属性名的数组
for…in
let obj = {a:1, b:2, c:3};
for (let prop in obj) {
console.log("obj." + prop + " = " + obj[prop]);
}
// Output:
// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"
判断对象中是否包含某一属性
in'a' in obj //返回值为布尔值
对象的引用
obj1 = obj2;
:将obj2的地址赋给obj1,而不是值
用const定义时也可以修改存储值,因为const定义的引用地址没变obj1 = obj3;
:将obj3的地址覆盖obj2的地址
向函数参数传递数据,对函数的参数来说传递的是值,对对象来说传递的是引用。在内层对对象的引用做出改变,外层对象的引用不变。
let obj1 = {num: 001};
function demo(obj){
console.log(obj); //{num:001}
obj = null;
console.log(obj); //null
}(obj1);
console.log(obj1); //{num:001}
虽然引用关系不变,但内容在内部被更改后外部也同时被更改
let obj1 = {num: 001};
function demo(obj1){
obj.num = 002;
console.log(obj); //{num:002}
}(obj1);
console.log(obj1); //{num:002}