对象是属性的集合

对象的分类:

  1. 内建对象:由ES标准中定义的对象,在任何的ES的实现中都可以使用。ex:Math,String,Number….
  2. 宿主对象:由JS的运行环境提供的对象:BOM,DOM。
  3. 自定义对象:由开发人员自己创建的对象。

对象数据类型的使用

  • 创建对象:
    • 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[“…”],取也需如此。

  1. var obj = {};
  2. obj["123"] = 789;
  3. var n = "123";
  4. console.log(obj["123"]);
  5. console.log(obj[n]); // 这两个输出效果相同,均为直接读取n的值
  1. var obj = {
  2. name:"Tom" ,
  3. age:18 ,
  4. test:{name:"jerry"} // 在对象里添加对象时,内对象要用":"而不是"="。
  5. };

对象的遍历

Object.keys(obj);

返回对象属性名的数组

for…in

  1. let obj = {a:1, b:2, c:3};
  2. for (let prop in obj) {
  3. console.log("obj." + prop + " = " + obj[prop]);
  4. }
  5. // Output:
  6. // "obj.a = 1"
  7. // "obj.b = 2"
  8. // "obj.c = 3"

判断对象中是否包含某一属性

in
'a' in obj //返回值为布尔值

对象的引用

obj1 = obj2;:将obj2的地址赋给obj1,而不是值
用const定义时也可以修改存储值,因为const定义的引用地址没变
obj1 = obj3;:将obj3的地址覆盖obj2的地址

向函数参数传递数据,对函数的参数来说传递的是值,对对象来说传递的是引用。在内层对对象的引用做出改变,外层对象的引用不变。

  1. let obj1 = {num: 001};
  2. function demo(obj){
  3. console.log(obj); //{num:001}
  4. obj = null;
  5. console.log(obj); //null
  6. }(obj1);
  7. console.log(obj1); //{num:001}

虽然引用关系不变,但内容在内部被更改后外部也同时被更改

  1. let obj1 = {num: 001};
  2. function demo(obj1){
  3. obj.num = 002;
  4. console.log(obj); //{num:002}
  5. }(obj1);
  6. console.log(obj1); //{num:002}