本帖最后由 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[key] //等价
- function getModel(name){
- varconfig = {
- "control":"EC-8000",
- "matrix":"HMX-1600",
- "audio":"SEKAKU",
- "name":"error"
- }
- returnconfig[name];
- }
- 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[key]);
- }
- // "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[key] =obj[key];
- }
- //方法2 通过JSON.stringify
- varobj = {a:1, b:2, c:3};
- vars = JSON.stringify(obj);
- varx = JSON.parse(s);
复制代码
|