一文搞懂js中的对象

在 JavaScript 中,对象(Object)是最常用的数据类型之一,用于存储和管理数据。以下是对 JavaScript 对象的详细介绍:


一、对象的定义和创建

1. 使用对象字面量

const obj = {
    key1: 'value1',
    key2: 'value2',
    key3: function() {
        console.log('This is a method');
    }
};

2. 使用构造函数

const obj = new Object();
obj.key1 = 'value1';
obj.key2 = 'value2';
obj.key3 = function() {
    console.log('This is a method');
};

3. 使用类(Class)

class MyClass {
    constructor(key1, key2) {
        this.key1 = key1;
        this.key2 = key2;
    }

    method() {
        console.log('This is a method');
    }
}

const obj = new MyClass('value1', 'value2');

4. 使用 Object.create()

const prototype = {
    greet: function() {
        console.log('Hello!');
    }
};

const obj = Object.create(prototype);
obj.key1 = 'value1';

二、对象的属性和方法

1. 属性的访问

  • 点语法
    console.log(obj.key1);
    
  • 方括号语法
    console.log(obj['key1']);

2. 属性的增删改查

  • 添加属性
    obj.newKey = 'newValue';
  • 修改属性
    obj.key1 = 'newValue1';
  • 删除属性
    delete obj.key1;
  • 检查属性是否存在
    console.log('key1' in obj); // true
    console.log(obj.hasOwnProperty('key1')); // true
    

三、遍历对象

1. for...in

遍历对象的可枚举属性(包括继承的属性)。

for (const key in obj) {
    console.log(key, obj[key]);
}

2. Object.keys()

返回对象的所有可枚举自身属性的键。

Object.keys(obj).forEach(key => {
    console.log(key, obj[key]);
});

3. Object.values()

返回对象所有可枚举自身属性的值。

Object.values(obj).forEach(value => {
    console.log(value);
});

4. Object.entries()

返回对象所有可枚举自身属性的键值对。

Object.entries(obj).forEach(([key, value]) => {
    console.log(key, value);
});

四、对象的特性

1. 动态特性

对象可以在运行时动态添加、修改或删除属性。

2. 原型链

每个对象都有一个原型对象(prototype),通过原型链可以继承属性和方法。

console.log(obj.__proto__); // 查看原型

3. 对象的不可变性

  • Object.freeze(obj):冻结对象,使其不能修改。
  • Object.seal(obj):封闭对象,使其不能添加或删除属性,但可以修改现有属性值。

五、对象的常用方法

1. 克隆对象

  • 浅拷贝
    const newObj = Object.assign({}, obj);
    const newObj2 = { ...obj };
    
  • 深拷贝
    const deepClone = JSON.parse(JSON.stringify(obj));
    

2. 合并对象

const obj1 = { a: 1 };
const obj2 = { b: 2 };
const mergedObj = { ...obj1, ...obj2 };

3. 获取对象属性描述符

const descriptor = Object.getOwnPropertyDescriptor(obj, 'key1');
console.log(descriptor);

4. 防止扩展对象

Object.preventExtensions(obj); // 禁止添加新属性

六、特殊对象

1. 数组

数组本质上是对象,键是索引。

const arr = [1, 2, 3];
console.log(typeof arr); // object

2. 函数

函数也是对象,可以有属性和方法。

function func() {}
func.prop = 'value';
console.log(func.prop);

3. 全局对象

例如浏览器中的 window 和 Node.js 中的 global


七、常见问题和注意事项

  1. 对象属性名可以是字符串或符号

    const sym = Symbol('key');
    obj[sym] = 'value';
    console.log(obj[sym]);
    
  2. 引用类型 对象是按引用传递的。

    const obj1 = { a: 1 };
    const obj2 = obj1;
    obj2.a = 2;
    console.log(obj1.a); // 2
    
  3. 对象的 JSON 表示

    • 转换为 JSON
      const jsonString = JSON.stringify(obj);
      
    • 解析 JSON
      const parsedObj = JSON.parse(jsonString);
      

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值