• 【JS】js给对象动态添加、设置、删除属性名和属性值


    1. 访问对象属性

    js中访问对象属性一共有两种方法:点获取法和方括号获取法。

    let user = {     // 一个对象
      name: "John",  // 键 "name",值 "John"
      age: 30,        // 键 "age",值 30。列表中的最后一个属性应以逗号结尾:便于我们添加、删除和移动属性
    };
    
    • 1
    • 2
    • 3
    • 4
    1. 使用点符号访问属性值 alert( user.name ); // John
    2. 使用方括号访问属性值 alert( user[name]); // John

    注意: 如果我们遍历一个对象,我们获取属性的顺序是和属性添加时的顺序相同吗?
    简短的回答是:“有特别的顺序”:整数属性会被进行排序,其他属性则按照创建的顺序显示。

    2. 删除对象属性

    使用delete关键字删除对象属性

    delete user.age;
    delete user[age];
    
    • 1
    • 2

    3. 动态设置属性

    最常用的对象属性获取方法是点获取法。
    但是当我们遇到需要给对象动态添加属性和属性值时,点获取法好像就不方便了,尤其是我们不知道属性名的时候更麻烦。这时候,方括号获取法就派上用场了。

    let order={
        id:1,
        name:'xxxx',
    }
    // 如果是直接给新属性赋值
    order['logisticsNo']='xxxx';
     
    // 如果添加的属性为[],则可以先创建属性值为空数组
    order['logisticsNo']=[];
    order['logisticsNo'].push(data); //注意数组才有push,不然会报错
     
    // 也可以使用变量名
    let key='logisticsNo';
    order[key]=[];
    order[key].push(data);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    计算属性

    当创建一个对象时,我们可以在对象字面量中使用方括号。这叫做 计算属性

    let fruit = prompt("Which fruit to buy?", "apple");
    
    let bag = {
      [fruit]: 5, // 属性名是从 fruit 变量中得到的
    };
    
    alert( bag.apple ); // 5 如果 fruit="apple"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    计算属性的含义很简单:[fruit] 含义是属性名应该从 fruit 变量中获取。

    所以,如果一个用户输入 “apple”,bag 将变为 {apple: 5}。

    本质上,这跟下面的语法效果相同:

    let fruit = prompt("Which fruit to buy?", "apple");
    let bag = {};
    
    // 从 fruit 变量中获取值
    bag[fruit] = 5;
    
    • 1
    • 2
    • 3
    • 4
    • 5

    我们可以在方括号中使用更复杂的表达式:

    let fruit = 'apple';
    let bag = {
      [fruit + 'Computers']: 5 // bag.appleComputers = 5
    };
    
    • 1
    • 2
    • 3
    • 4

    属性存在判断: “in” 操作符

    相比于其他语言,JavaScript 的对象有一个需要注意的特性:能够被访问任何属性。即使属性不存在也不会报错!

    读取不存在的属性只会得到 undefined。所以我们可以很容易地判断一个属性是否存在:

    let user = {};
    
    alert( user.noSuchProperty === undefined ); // true 意思是没有这个属性
    
    • 1
    • 2
    • 3

    in 的左边必须是 属性名。通常是一个带引号的字符串。

    let user = { name: "John", age: 30 };
    
    alert( "age" in user ); // true,user.age 存在
    alert( "blabla" in user ); // false,user.blabla 不存在。
    
    • 1
    • 2
    • 3
    • 4

    推荐直接使用in来判断对象的属性是否存在。

    “for…in” 循环

    let user = {
      name: "John",
      age: 30,
      isAdmin: true
    };
    
    for (let key in user) {
      // keys
      alert( key );  // name, age, isAdmin
      // 属性键的值
      alert( user[key] ); // John, 30, true
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 检查空对象
    function isEmpty(obj) {
      for (let key in obj) {
        // 如果进到循环里面,说明有属性。
        return false;
      }
      return true;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    1. 对象属性求和
    let salaries = {
      John: 100,
      Ann: 160,
      Pete: 130
    };
    
    let sum = 0;
    for (let key in salaries) {
      sum += salaries[key];
    }
    
    alert(sum); // 390
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    1. 将数值属性值都乘以 2
    // 在调用之前
    let menu = {
      width: 200,
      height: 300,
      title: "My menu"
    };
    
    multiplyNumeric(menu);
    
    // 调用函数之后
    menu = {
      width: 400,
      height: 600,
      title: "My menu"
    };
    
    function multiplyNumeric(obj) {
      for (let key in obj) {
        if (typeof obj[key] == 'number') {
          obj[key] *= 2;
        }
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
  • 相关阅读:
    R语言kaggle 游戏数据探索与可视化
    vivo 基于 JaCoCo 的测试覆盖率设计与实践
    关于运行PR提示vcruntime140.dll无法继续执行代码的4个解决方法分享
    笔记_前端基础试题:HTML+CSS
    b=a++和b=++a区别及a=++a、a=a++区别
    Python中的迭代器
    微信小程序-生成canvas图片并保存到手机相册
    【Linux】Linux常用操作命令(四)
    GoLong的学习之路(二十一)进阶,语法之并发(go最重要的特点)(协程的主要用法)
    手撕Vuex-提取模块信息
  • 原文地址:https://blog.csdn.net/weixin_42960907/article/details/126071925