JavaScript对象操作

在javascript中,对象是用来存储一组键值对的数据结构。以下是一些常见的对象操作方法和技巧:

  1. 创建对象

    let obj = {
      name: 'John',
      age: 30,
      city: 'New York'
    };
    

    或者使用 new Object() 语法:

    let obj = new Object();
    obj.name = 'John';
    obj.age = 30;
    
  2. 访问和修改对象属性
    • 通过 点操作符:

    let name = obj.name;  // 'John'
    obj.age = 31;         // 修改属性值
    

    • 通过 方括号操作符(适用于动态属性或属性名是无效的标识符时):

    let age = obj['age'];   // 31
    obj['city'] = 'Los Angeles'; // 修改属性值
    
  3. 添加新属性

    obj.country = 'USA';  // 添加一个新属性
    obj['gender'] = 'Male';  // 另一种方式
    
  4. 删除属性
    • delete 操作符用于删除对象中的属性

    delete obj.age;  // 删除 age 属性
    
  5. 检查属性是否存在
    • 使用 in 操作符:

    console.log('name' in obj);  // true
    console.log('gender' in obj);  // false
    

    • 使用 hasOwnProperty() 方法:

    console.log(obj.hasOwnProperty('name'));  // true
    
  6. 获取对象所有的属性名和属性值
    • Object.keys():返回对象的所有属性名(数组)

    let keys = Object.keys(obj);  // ['name', 'age', 'city', 'country', 'gender']
    

    • Object.values():返回对象的所有属性值(数组)

    let values = Object.values(obj);  // ['John', 31, 'Los Angeles', 'USA', 'Male']
    

    • Object.entries():返回对象的所有键值对(二维数组)

    let entries = Object.entries(obj);  // [['name', 'John'], ['age', 31], ['city', 'Los Angeles'], ['country', 'USA'], ['gender', 'Male']]
    
  7. 遍历对象
    • 使用 for…in 循环遍历对象的属性:

    for (let key in obj) {
      if (obj.hasOwnProperty(key)) {
        console.log(key, obj[key]);
      }
    }
    

    • 使用 Object.entries() 和 forEach() 遍历键值对:

    Object.entries(obj).forEach(([key, value]) => {
      console.log(key, value);
    });
    
  8. 合并对象
    • Object.assign():将一个或多个源对象的所有属性复制到目标对象

    let obj1 = { a: 1, b: 2 };
    let obj2 = { b: 3, c: 4 };
    let mergedObj = Object.assign({}, obj1, obj2);  // { a: 1, b: 3, c: 4 }
    

    • 使用展开运算符(…):

    let mergedObj = { ...obj1, ...obj2 };  // { a: 1, b: 3, c: 4 }
    
  9. 深拷贝对象
    • Object.assign() 是浅拷贝,仅复制一级属性

    let shallowCopy = Object.assign({}, obj);  // 浅拷贝
    

    • 使用 JSON 方法进行深拷贝:

    let deepCopy = JSON.parse(JSON.stringify(obj));  // 深拷贝
    

    • 使用第三方库(如 Lodash)的 cloneDeep() 方法:

    let deepCopy = _.cloneDeep(obj);  // Lodash 深拷贝
    
  10. 预设默认值
    • 使用 ?? (nullish coalescing operator) 设置默认值(仅在 null 或 undefined 时生效)

    let name = obj.name ?? 'Default Name';  // 如果 obj.name 是 null 或 undefined,则使用 'Default Name'
    

    • 使用 || 作为传统的默认值方法(适用于 falsy 值)

    let name = obj.name || 'Default Name';  // 如果 obj.name 是 falsy(如 null, undefined, '', 0 等)则使用 'Default Name'
    
  11. 对象解构
    • 从对象中提取值并赋给变量

    let { name, age } = obj;  // 解构,name = 'John', age = 31
    

    • 设置默认值

    let { name, city = 'Unknown' } = obj;  // 如果 city 不存在,使用默认值 'Unknown'
    
  12. 修改对象的原型
    • Object.setPrototypeOf():设置对象的原型

    let newObj = { a: 1 };
    let proto = { b: 2 };
    Object.setPrototypeOf(newObj, proto);
    console.log(newObj.b);  // 2
    
  13. 冻结和密封对象
    • Object.freeze():冻结对象,防止修改已有的属性

    Object.freeze(obj);
    obj.name = 'Jane';  // 无效,属性不可修改
    

    • Object.seal():密封对象,防止新增或删除属性

    Object.seal(obj);
    obj.gender = 'Female';  // 无效,无法新增属性
    delete obj.city;  // 无效,无法删除属性
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

落雪寒窗-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值