pidtfork 发表于 2020-10-28 18:53:47

JavaScript中的对象

本帖最后由 pidtfork 于 2020-10-28 18:57 编辑

JavaScript对象•            对象时JavaScript的基本数据类型。对象时一个复合值:它将很多值聚合在一起,可通过名字访问这些值。
•            对象可以看做事属性的无序集合,每个属性都是一个名/值对。
•            属性名是包括字符串在内的任意字符串,属性值可以是除undefined值之外的任何值,因此我们可以吧对象看成时从字符串到值的映射。
•            对象时动态的可以新增属性也可以删除属性
•            除了 数字,true、false、null、undefined其他都所有值都是对象
•            对象时无类别的,它对新属性的名字和值没有约束,对象可以包含其他对象。
•            对象的引用
JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。对象是拥有属性、方法的数据。



创建对象

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

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


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



对象属性操作

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

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

function getModel(name){
    varconfig = {
      "control":"EC-8000",
      "matrix":"HMX-1600",
      "audio":"SEKAKU",
      "name":"error"
    }
    returnconfig;
}

getModel("control"); //"EC-8000"
getModel("matrix"); //"HMX-1600"
getModel("audio"); //"SEKAKU"

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

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


"logo" inmatrix//true
"hello" in matrix//false

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

// "obj.a = 1"
// "obj.b = 2"
// "obj.c = 3"


序列号对象

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

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

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

JSON.stringify(obj,null,"   "); //转成的json字符串带空格换行如下
{
   "a": 1,
   "b": 2,
   "c": 3
}


对象的引用


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

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

var obj ={
    "a": 100
}
vary =obj;
varx =y;

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

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

console.log(x==y); //true
console.log([]==[]); //false



对象拷贝

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

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






页: [1]
查看完整版本: JavaScript中的对象