深入了解Js中的对象

分类:编程技术 时间:2024-02-20 19:13 浏览:0 评论:0
0

文章深入了解Js中的对象,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

在JavaScript中,对象是个无序的键值对数据集。例如:

  var xiaoqiang={      name:"wangqiang",      age:30,      city:"guangzhou",      job:"engineer"  }

上述例子中的小强是一位年轻人,对于这个对象我们用一个括号进行定义。在括号体内我们描述了这个人的几种属性:姓名、年龄、所在城市,工作等。 每一个属性对应一个值,形成了一个数据集。

对象属性的访问、添加、删除

我们可以通过点操作符访问一个对象的属性,访问小强的姓名可以用xiaoqiang.name,也可以用方括号的方式xiaoqiang["name"]的方式。还可以动态添加一个属性, 动态删除一个属性。例如:

  xiaoqiang["name"];    //返回wangqiang  xiaoqiang.name;       //返回wangqiang  xiaoqiang.height;     //undefined  xiaoqiang.height = 1.8  // 给xiaoqiang动态添加了一个属性  delete xiaoqiang.height;

我们还可以通过Object的静态方法defineProperty动态地给一个对象添加属性。下面的例子,我们动态地给xiaoli对象添加一个name属性:

  xiaoli = {};  Object.defineProperty(xiaoli,"name",{      value:"xiaoli",      writable:false,  // 属性不能修改,      enumerable:true, // 属性可枚举,如:可以通过for ( let item of Object.entries(xiaoli)){...} 的方式枚举属性  })

对象属性的测试

通过in关键字测试对象中的属性,也可以通过Object的hasOwn方法测试对象属性。一个对象的属性包括自有属性和继承来的属性。

  "name" in xiaoqiang;    //true;  "toString" in xiaoqiang;  //true 通过object对象继承的属性  xiaoqiang.hasOwnProperty("age") //true age是xiaoqiang自己的属性  xiaoqiang.hasOwnProperty("toString")//false 通过继承自object的属性,不算自己的属性  Object.hasOwn(xiaoqiang,"age");  //true Object的静态方法判断是否是自己的属性  Object.hasOwn(xiaoqiang,"toString"); //false  Object.getOwnPropertyNames(person);  //获取所有自身的属性名称

特殊情况

在定义一个对象时,对象属性的键是字符串类型,一般情况下可以省略单引号或双引号。如果键中包含特殊的字符,那就必须带上双引号或单引号,例如:

  var xiaoqiang={      name:"wangqiang",      age:30,      city:"guangzhou",      job:"engineer",      "company-address":"tianhe district,guangzhou" // company-address要加引号  }  xiaoqiang["company-address"]  

上述对象xiaoqiang的company-address属性带有特殊的符号,所以定义的时候需用引号包裹起来,在进行属性访问的时候需用方括号

对象属性以及值的遍历

使用Object的entries方法,然后进行遍历

  var xiaoqiang={      name:"wangqiang",      age:30,      city:"guangzhou",      job:"engineer",      "company-address":"tianhe district,guangzhou" // company-address要加引号  }  //对象属性的遍历。  for (let item of Object.entries(xiaoqiang)){      console.log(item[0],item[1]);  }

使用Object的keys方法和values方法,然后进行遍历

  var xiaoqiang={      name:"wangqiang",      age:30,      city:"guangzhou",      job:"engineer",      "company-address":"tianhe district,guangzhou" // company-address要加引号  }  //对象键的遍历。  for (let item of Object.keys(xiaoqiang)){      console.log(item);  }  //对象值的遍历。  for (let item of Object.values(xiaoqiang)){      console.log(item);  }

对象的冻结、密封、不可扩展

冻结对象:一个冻结对象是指已经不能添加新属性、删除现有属性或修改已有属性的值的对象。使用 Object.freeze() 方法可以将对象转换为冻结对象。

  var lihong={};  lihong.name="lihong";  lihong.age=20;  Object.freeze(lihong);  lihong.height = 171;  //height属性添加不成功  delete lihong.age;    //age属性删除不成功  lihong.name = "Lihong"; //age属性修改不成功

密封对象:一个密封对象是指已经不能添加新属性和删除现有属性的对象,但是可以修改已有属性的值。使用 Object.seal() 方法可以将对象转换为密封对象。

  var lihong={};  lihong.name="lihong";  lihong.age=20;  Object.seal(lihong);  lihong.height = 171;  //height属性添加不成功  delete lihong.age;    //age属性删除不成功  lihong.name = "Lihong"; //name属性可修改的

不可扩展对象:一个不可扩展对象是指已经不能添加新属性的对象,但是可以修改现有属性的值或删除现有属性。使用 Object.preventExtensions() 方法可以将对象转换为不可扩展对象。

  var lihong={};  lihong.name="lihong";  lihong.age=20;  Object.preventExtensions(lihong);  lihong.height = 171;  //height属性添加不成功  delete lihong.age;    //age属性是可删除的  lihong.name = "Lihong"; //name属性是可修改的

文章同时发表在:码农编程网 欢迎访问

本节重点

对象是一个无序键值对的数据集;对象的属性必须是字符串、如包含特殊的字符引号包裹起来;对象属性的添加、测试、对象属性和值的遍历;冻结对象、密封对象、不可扩展对象。

1. 本站所有资源来源于用户上传或网络,仅作为参考研究使用,如有侵权请邮件联系站长!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > 深入了解Js中的对象

用户评论