UBAINS

 找回密码
 立即注册
搜索
热搜: UBAINS
查看: 3052|回复: 0

[学习笔记] JavaScript中的对象

[复制链接]

10

主题

11

帖子

447

积分

版主

Rank: 7Rank: 7Rank: 7

积分
447
QQ
发表于 2020-10-28 18:53:47 | 显示全部楼层 |阅读模式
本帖最后由 pidtfork 于 2020-10-28 18:57 编辑

JavaScript对象
•            对象时JavaScript的基本数据类型。对象时一个复合值:它将很多值聚合在一起,可通过名字访问这些值。

•            对象可以看做事属性的无序集合,每个属性都是一个名/值对。

•            属性名是包括字符串在内的任意字符串,属性值可以是除undefined值之外的任何值,因此我们可以吧对象看成时从字符串到值的映射。

•            对象时动态的可以新增属性也可以删除属性

•            除了 数字,true、false、null、undefined其他都所有值都是对象

•            对象时无类别的,它对新属性的名字和值没有约束,对象可以包含其他对象。

•            对象的引用

JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。对象是拥有属性、方法的数据。



创建对象

字面量直接创建对象和通过new 关键字创建对象;

  1. var device ={};            //没有属性的对象
  2. varpoint = { x: 100, y: 200 };  //两个属性
  3. varpoint2 = {          //属性的值是另一对象的值和表达式运算的结果
  4.     x: point.x + 20,    //120
  5.     y: point.y / 10     //20
  6. };
  7. varmatrix = {
  8.     logo: "UBAINS",      //属性值可以是除undefined值之外的任何值,
  9.     "model": "AIO-1608", //虽然属性名是字符串,在创建和通过.形式取值时,不用双引号
  10.     "": null,           //属性名是包括字符串在内的任意字符串
  11.     size: {             //属性值可以是另一个对象,对象可以包含其他对象。
  12.         length: 600,
  13.         width: 400,     
  14.         height: 100,
  15.     },
  16.     switch: function () {   //属性值可以是函数对象,这时也称switch为matrix对象的方法
  17.         console.log("switch");
  18.         return "hello"
  19.     }
  20. }
  21. matrix.type = "matrix";         //动态的新增属性和值
  22. deletematrix.type ;            //动态的删除属性和值
  23. matrix["sn"] = 202006042341;    //动态的新增属性和值
  24. matrix.model = "AIO-3208";      //动态的修改属性值


  25. varo = new Object();    //创建一个空对象,和{}一样
  26. vara = new Array();  //创建一个空数组,和[]一样
  27. vard = new Date();  //创建一个表示当前时间的Date对象
复制代码




对象属性操作

通过[]方法获取对象值的用处,如下 getModel 中返回的config对象的值是跟传入参数有关的,所以必须使用 [] 方法来去对象的值,如果使用 . 方法也就是 config.name 会一直返回“error”字符,

如果 config 对象没有 name 这个属性就一直返回 undefined,总之取对象值时,属性名为变量时必须使用 [] 写法
  1. var logo =matrix.logo;         //通过 . 方式获取属性值
  2. varmodel = matrixa["model"];   // 也可以通过[]写法获取属性值
  3. //获取对象属性的三种方式
  4. varobj = {
  5.     name:"ubains"
  6. }
  7. varkey = "name";
  8. obj.name ==obj["name"] == obj[key] //等价

  9. function getModel(name){
  10.     varconfig = {
  11.         "control":"EC-8000",
  12.         "matrix":"HMX-1600",
  13.         "audio":"SEKAKU",
  14.         "name":"error"
  15.     }
  16.     returnconfig[name];
  17. }

  18. getModel("control"); //"EC-8000"
  19. getModel("matrix"); //"HMX-1600"
  20. getModel("audio"); //"SEKAKU"
复制代码


通过 delete 方法随时删除对象属性,属性删了值自然也是删除了。也可以随时添加属性。

可以通过 in 运算符检查对象是否包含某个属性


  1. "logo" inmatrix  //true
  2. "hello" in matrix  //false

  3. if("logo" in matrix) {
  4.     //存在时怎么操作
  5. }
  6. for...in语句以任意顺序遍历一个对象的属性。
  7. var obj ={a:1, b:2, c:3};
  8.    
  9. for(varkey in obj) {
  10.   console.log("obj." +key + " = " + obj[key]);
  11. }

  12. // "obj.a = 1"
  13. // "obj.b = 2"
  14. // "obj.c = 3"
复制代码


序列号对象

JavaScript提供了两个方法来将JavaScript对象转为json字符串和将json字符串转为JavaScript对象

对象里面有属性值为函数的时候,序列化的时候去丢弃属性和值。
  1. JSON.stringify();   //将一个对象转成json字符串
  2. JSON.parse();       //将一个json字符串转成对象

  3. varobj = {a:1, b:2, c:3};
  4. JSON.stringify(obj);  //{"a":1,"b":2,"c":3}
  5. varobj = JSON.parse('{"a":1,"b":2,"c":3}');

  6. JSON.stringify(obj,null,"   "); //转成的json字符串带空格换行如下
  7. {
  8.    "a": 1,
  9.    "b": 2,
  10.    "c": 3
  11. }
复制代码



对象的引用


虽然我们定义的xy变量等于obj对象,但是这其实是对象的引用,并没有让xy单独指向一个obj的副本。要复制对象就要使用对象的拷贝。

小提示:不要两边都是对象做等于等于运算,可以用JSON.stringify()转成字符串来比较两个对象是否相等。或者遍历对象通过比较属性和值。

  1. var obj ={
  2.     "a": 100
  3. }
  4. vary =obj;
  5. varx =  y;

  6. x.a = 99;
  7. console.log(obj);  //{a: 99 }

  8. y.a = 98;
  9. console.log(obj); //{ a: 98 }

  10. console.log(x==y); //true
  11. console.log([]==[]); //false
复制代码




对象拷贝

  1. //方法1是通过遍历的方式给新的对象赋值;
  2. varobj = {a:1, b:2, c:3};
  3. varx ={};  
  4. for(varkey in obj) {
  5.   x[key] =obj[key];
  6. }

  7. //方法2 通过JSON.stringify
  8. varobj = {a:1, b:2, c:3};
  9. vars = JSON.stringify(obj);
  10. varx = JSON.parse(s);  


复制代码




高级模式
B Color Image Link Quote Code Smilies |上传

本版积分规则

Archiver|手机版|小黑屋|BBS.UBAINSYUN.COM

GMT+8, 2024-4-20 15:52 , Processed in 0.034528 second(s), 19 queries .

Powered by UBAINS! X3.4

© 2001-2017 UBAINS Inc.

快速回复 返回顶部 返回列表