javaScript 基础知识汇总(四)

1、对象

   概念:对象可以通过花括号{...} 和其中包含一些可选的属性来创建。 属性时一个键值对,键是一个字符串,值可以是任何类型。

       对象的创建

1 let  user = new Object();   //构造函数  的语法
2 let user = {};  //"字面量" 的语法

  对象的属性:

1 let user = {  //一个对象
2      name : "John",  //键“name"  ,值"John"
3      age:30             //"键”age“ ,值 30
4 };
5 
6 属性有键 ,在冒号的前面”:“,值在冒号的右边

    对象属性的添加和删除

1 user.sex = "man";  //对象属性的添加
2 delete user.sex;  //对象的的删除

  对象中方括号的使用

1 //处理多词属性
2 let user = {};
3 
4 user["like birds"] = true;//设置
5 
6 alert(user["like birds"]); //true   使用
7 
8 delete user["like birds"]; // 删除

  计算属性

 1 //例子一:
 2     let fruit ="apple";
 3     let bag = {
 4             [fruit]:5
 5    };
 6     alert(bag.apple);
 7 
 8 //例子二:
 9     let fruit = "apple";
10     let bag = {};
11     bag[fruit] = 5;
12 //例子三
13     let fruit = "apple";
14     let bag = {
15         [fruit + "test"]:5;
16     };
17     alert(bag.fruittest);

  属性值简写

  当属性值的和键相同时可以如下所写

let user = {
    name,   //此处  name 和 name:name 相同
    age:13
}

  对像属性存在值的检查

  判断的方式  通过获取属性如果为undefined 则不存在,另一种方式为使用 in 关键字,但也存在特殊情况。具体示例如下:

 1 let user = {);
 2 
 3 alert( user.isExist==undifined) //true  表示这个属性不存在
 4 
 5 alert("isExist" in user); //false   属性不存在
 6 
 7 //特殊情况
 8 
 9 let obj = {
10     test:undefined
11 }
12 
13 alert(obj.test==undefined) //false ,但是这个属性存在,所以这时候使用这种方式就不合适
14  alert("test" in obj); //true  表示这个属性存在。

  for  ... in 循环

 1 let user = {
 2   name: "John",
 3   age: 30,
 4   isAdmin: true
 5 };
 6 
 7 for(let key in user) {
 8   // keys
 9   alert( key );  // name, age, isAdmin
10   // 属性键的值
11   alert( user[key] ); // John, 30, true
12 }

  引用复制

1 let user = { name: 'John' };
2 
3 let admin = user;
4 
5 admin.name = 'Pete'; //  改变 "admin" 的引用
6 
7 alert(user.name); // 'Pete', changes are seen from the "user" reference
8 上面的例子展示了只存在一个对象,就像我们的抽屉有两把钥匙,如果一个钥匙(admin)去使用了
抽屉,稍后使用另外一个钥匙(user)打开的时候,就会看到有变化。

  比较引用

  

 1 //两个引用指向同一个对象的时候他们相等。
 2 let a = {};
 3 let b = a; // 复制引用
 4 
 5 alert( a == b ); // true,两个变量指向同一个对象
 6 alert( a === b ); // true
 7 
 8 //如果是两个不同的属性,他们就不相等,即使都是空的。
 9 let a = {};
10 let b = {}; // 两个独立的对象
11 
12 alert( a == b ); // false

  常量对象

 1 //一个被 const 修饰的对象可以被修改。
 2 const user = {
 3   name: "John"
 4 };
 5 
 6 user.age = 25; // (*)
 7 
 8 alert(user.age); // 25
 9 //但是不能修改user这个对象
10 const user = {
11   name: "John"
12 };
13 
14 // 错误(不能再给 User 赋值)
15 user = {
16   name: "Pete"
17 };

  对象复制和合并  Object.assign

  复制一个对象的变量也等同于创建了此对象的另一个引用。

  

 1 //用原始的代码操作
 2 let user = {
 3   name: "John",
 4   age: 30
 5 };
 6 
 7 let clone = {}; // 新的空对象
 8 
 9 // 复制所有的属性值
10 for (let key in user) {
11   clone[key] = user[key];
12 }
13 
14 // 现在复制是独立的复制了
15 clone.name = "Pete"; // 改变它的值
16 
17 alert( user.name ); // 原对象属性值不变

  用Object.assign 来实现

  语法:Object.assign(dest[, src1, src2, src3...])

  • 参数 destsrc1, ..., srcN(可以有很多个)是对象。
  • 这个方法复制了 src1, ..., srcN 的所有对象到 dest。换句话说,从第二个参数开始,所有对象的属性都复制给了第一个参数对象,然后返回 dest
    1 let user = {
    2   name: "John",
    3   age: 30
    4 };
    5 
    6 let clone = Object.assign({}, user);

    特殊情况,对象中仍有对象

     1 let user = {
     2   name: "John",
     3   sizes: {
     4     height: 182,
     5     width: 50
     6   }
     7 };
     8 
     9 let clone = Object.assign({}, user);
    10 
    11 alert( user.sizes === clone.sizes ); // true,同一个对象
    12 
    13 // user 和 clone 共享 sizes 对象
    14 user.sizes.width++;       // 在这里改变一个属性的值
    15 alert(clone.sizes.width); // 51
    在这种情况下,对象内部的对象并没有完全复制,而只是复制了对象的的值,在这种情况下,要再次判断,或者选择完善的j库

 

posted @ 2019-09-01 18:11  小七要走  阅读(247)  评论(0编辑  收藏  举报