JavaScript 对象操作方法详解

在 JavaScript 中,对象是一种非常重要的数据结构,用于存储各种类型的数据。对象由一组键值对组成,每个键对应一个值。对象的操作是 JavaScript 编程中最常见的任务之一,掌握各种对象操作方法能让你更高效地处理数据。

以下是 JavaScript 中常见的对象操作方法及其用法示例:


1、创建对象

字面量创建对象:

js 复制代码
let obj = {};  // 创建空对象
let objWithProps = { name: 'John', age: 30 };  // 创建带有属性的对象

使用构造函数创建对象:

js 复制代码
let obj = new Object();  // 创建空对象
  • 字面量创建对象 更简洁且更常用,尤其是带属性的对象。
  • 构造函数创建对象 适用于需要动态创建对象的场景,但一般不常见。

2、添加属性

直接添加属性:

js 复制代码
obj.property = 'value';  // 直接通过点操作符添加属性

使用字符串形式添加属性:

js 复制代码
obj['property'] = 'value';  // 使用字符串形式添加属性

使用变量作为属性名:

js 复制代码
let propName = 'dynamicProperty';
obj[propName] = 'value';  // 使用变量作为属性名添加属性
  • 点操作符 是最常见的方式,简洁明了。
  • 方括号操作符 适用于动态属性名,或者属性名是保留字时(如 class、function)。
  • 使用变量作为属性名 允许你通过动态的变量值来设置属性。

3、 删除属性

删除属性:

js 复制代码
delete obj.property;  // 删除对象的指定属性
  • delete 操作符可以删除对象的属性,但不能删除对象本身。
  • 如果删除的是原型链上的属性,则不会影响对象实例本身。

4、检查属性

检查对象是否有该属性(不检查原型链) :

js 复制代码
obj.hasOwnProperty('property');  // 返回 true 或 false

检查对象是否有该属性(包括原型链上的属性) :

js 复制代码
'property' in obj;  // 返回 true 或 false
  • hasOwnProperty() 只检查对象本身是否拥有该属性,不检查原型链。
  • in 运算符 会检查对象及其原型链是否有该属性。

5. 访问属性值

直接访问属性值:

js 复制代码
console.log(obj.property);  // 通过点操作符获取属性值

使用字符串形式访问属性值:

js 复制代码
console.log(obj['property']);  // 使用方括号访问属性值

使用变量作为属性名访问:

js 复制代码
let propName = 'dynamicProperty';
console.log(obj[propName]);  // 使用变量获取属性值
  • 点操作符 是最常见且最直观的访问方式。
  • 方括号操作符 可用于动态访问或访问非法变量名(如带空格、保留字等)。

6. 修改属性值

直接修改属性值:

js 复制代码
obj.property = 'newValue';  // 修改已有属性的值

使用字符串形式修改属性值:

js 复制代码
obj['property'] = 'newValue';  // 修改已有属性的值

使用变量作为属性名修改属性值:

js 复制代码
let propName = 'dynamicProperty';
obj[propName] = 'newValue';  // 修改动态属性的值
  • 修改属性值时,使用点操作符或方括号都可以。
  • 如果修改的属性不存在,JavaScript 会自动添加该属性。

7. 遍历对象

使用 for...in 循环遍历对象的所有属性:

js 复制代码
for (let key in obj) {
  if (obj.hasOwnProperty(key)) {
    console.log(key, obj[key]);  // 遍历属性名和属性值
  }
}
  • for...in 用于遍历对象的所有可枚举属性(包括原型链上的属性),因此常与 hasOwnProperty() 结合使用,避免遍历到继承的属性。 使用 Object.keys() 获取对象的所有属性名:
js 复制代码
Object.keys(obj);  // 返回对象的所有属性名(不包括原型链上的属性)

使用 Object.values() 获取对象的所有属性值:

js 复制代码
Object.values(obj);  // 返回对象的所有属性值(不包括原型链上的属性)

使用 Object.entries() 获取对象的所有属性名和属性值的数组:

js 复制代码
Object.entries(obj);  // 返回包含键值对的二维数组
  • Object.keys()、Object.values() 和 Object.entries() 不会遍历原型链上的属性,只返回对象本身的属性。

8. 对象的拷贝

浅拷贝对象(只拷贝第一层属性):

js 复制代码
let obj2 = Object.assign({}, obj);  // 创建对象的浅拷贝

深拷贝对象(递归拷贝所有层级的属性):

js 复制代码
let obj2 = JSON.parse(JSON.stringify(obj));  // 创建对象的深拷贝
  • 浅拷贝 只复制对象的第一层属性,对嵌套的对象仍然是引用。
  • 深拷贝 会递归复制对象的所有属性,包括嵌套的对象和数组。

9. 类型判断

判断对象类型:

js 复制代码
typeof obj;  // 返回 'object',但对于 null 会返回 'object'
  • typeof 运算符会返回 "object",但对于 null 也会返回 "object",因此需要额外检查。 判断是否为数组:
js 复制代码
Array.isArray(obj);  // 判断对象是否为数组,返回 true 或 false
  • Array.isArray() 是判断数组类型的标准方法。

总结

JavaScript 提供了多种方法用于操作对象,灵活地处理对象的创建、属性访问、修改、删除、遍历等操作。以下是常见对象操作的总结:

  1. 创建对象:使用字面量或构造函数创建对象。
  2. 操作属性:通过点操作符、方括号操作符、变量等方式添加、修改、删除对象的属性。
  3. 遍历对象 :使用 for...in、Object.keys()、Object.values()、Object.entries() 等方法遍历对象。
  4. 对象拷贝 :使用 Object.assign() 进行浅拷贝,使用 JSON.parse(JSON.stringify()) 进行深拷贝。
  5. 类型判断 :使用 typeof 判断类型,使用 Array.isArray() 判断是否为数组。

掌握这些对象操作方法,能够帮助你更高效地编写 JavaScript 代码,处理日常开发中的对象数据操作。

相关推荐
FungLeo4 小时前
成为全栈·React 管理后台篇·总复盘:从“接口能调通”到“后台值得使用”
前端·react.js·前端框架·项目复盘·成为全栈
Csvn6 小时前
并发模式:让渲染学会排队、插队和让路
前端
可乐鸡翅yeah_6 小时前
新手梳理:M3U8 线上问题,哪些是前端锅,哪些是后端锅
前端·ios·音视频·实时音视频·m3u8·音视频在线播放
Flynt6 小时前
Linear 用 1000 个 PR 换掉 styled-components,我写了 200 个按钮,把这笔账复现了一遍
前端·css·preact
JavaGuide7 小时前
NVIDIA 又开源了!这次给 AI Agent 加上权限管控
前端·后端
excel7 小时前
prisma 如何处理数据库竞态
前端·数据库·后端
莪_幻尘8 小时前
Skill 体检:30 个 Skill 全凭感觉?体检器先自曝了 8 个“假 0 分
前端·人工智能·llm
风骏时光牛马8 小时前
AI模型综合能力评测:性能、指令遵循与多场景实测对比
前端
Frag0ut9 小时前
Chrome与Chromium内核浏览器在Windows 11上的新特性全景解析
前端·chrome·windows·web安全·chromium·gemini ai·playready drm
hiahiahia1239 小时前
实现完整 Tool Dispatcher
开发语言·前端