zoukankan      html  css  js  c++  java
  • 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      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库
  • 相关阅读:
    arpspoof局域网断网攻击
    2019-2020 SEERC 2019
    2019-2020 XX Open Cup, Grand Prix of Korea
    欧拉函数板子
    Syncthing – 数据同步利器
    程序员的修养 -- 如何写日志(logging)
    css基础
    vim永久设置主题
    基金选择
    如何查看ntp端口是否正常
  • 原文地址:https://www.cnblogs.com/xiaoqiyaozou/p/11443060.html
Copyright © 2011-2022 走看看