JavaScript对象实战及应用

news2024/11/26 7:38:50

 🎬 岸边的风:个人主页

 🔥 个人专栏 :《 VUE 》 《 javaScript 》

⛺️ 生活的理想,就是为了理想的生活 !

在这里插入图片描述

目录

引言

1. 对象属性

访问属性

修改属性

删除属性

动态添加属性

属性枚举

属性描述符

2. 对象 API

Object.keys()

Object.values()

Object.entries()

Object.assign()

Object.freeze()

3. 实现对象 API

4. 应用场景


 

引言

在 JavaScript 中,对象是一种非常重要的数据类型,它允许我们以键值对的形式组织和存储数据。对象提供了丰富的属性和方法,使得我们能够创建、操作和管理复杂的数据结构。本文将详细介绍 JavaScript 对象的属性和常用 API,并提供一个模拟实现对象的示例。同时,还将探讨对象的应用场景和一些相关的参考资料。

1. 对象属性

JavaScript 对象的属性是以键值对的形式存储的。对象属性可以是任意类型的值,包括基本数据类型(如字符串、数字、布尔值)和其他对象。

访问属性

我们可以使用点符号或方括号来访问对象的属性。例如:

const person = {
  name: 'John',
  age: 25,
};

console.log(person.name); // 输出: John
console.log(person['age']); // 输出: 25

修改属性

可以通过赋值运算符来修改对象的属性值。例如:

person.age = 30;
console.log(person.age); // 输出: 30

删除属性

可以使用 delete 关键字来删除对象的属性。例如:

delete person.age;
console.log(person.age); // 输出: undefined

动态添加属性

JavaScript 对象是动态的,意味着我们可以在运行时动态添加新的属性。例如:

person.address = '123 Main Street';
console.log(person.address); // 输出: 123 Main Street

属性枚举

JavaScript 对象的属性默认可枚举,即可以通过 for...in 循环遍历对象的属性。可以使用 Object.defineProperty() 方法来定义不可枚举的属性。例如:

const car = {
  brand: 'Toyota',
  model: 'Camry',
};

Object.defineProperty(car, 'color', {
  value: 'blue',
  enumerable: false,
});

for (let key in car) {
  console.log(key); // 输出: brand, model
}

在上面的示例中,我们使用 Object.defineProperty() 定义了一个不可枚举的 color 属性,因此在 for...in 循环中不会被遍历到。

属性描述符

每个属性都有一个与之关联的属性描述符,描述了属性的各种特性。可以使用 Object.getOwnPropertyDescriptor() 方法获取属性的描述符。例如:

const descriptor = Object.getOwnPropertyDescriptor(person, 'name');
console.log(descriptor);
// 输出: { value: 'John', writable: true, enumerable: true, configurable: true }

在上面的示例中,我们获取了 person 对象的 name 属性的描述符。

2. 对象 API

JavaScript 对象提供了许多常用的 API,用于操作和管理对象的属性和行为。

Object.keys()

Object.keys() 方法返回一个包含对象

所有可枚举属性的数组。

const person = {
  name: 'John',
  age: 25,
};

const keys = Object.keys(person);
console.log(keys); // 输出: ['name', 'age']

Object.values()

Object.values() 方法返回一个包含对象所有可枚举属性值的数组。

const person = {
  name: 'John',
  age: 25,
};

const values = Object.values(person);
console.log(values); // 输出: ['John', 25]

Object.entries()

Object.entries() 方法返回一个包含对象所有可枚举属性键值对的数组。

const person = {
  name: 'John',
  age: 25,
};

const entries = Object.entries(person);
console.log(entries);
// 输出: [['name', 'John'], ['age', 25]]

Object.assign()

Object.assign() 方法用于将一个或多个源对象的属性复制到目标对象中。

const target = {
  name: 'John',
};

const source = {
  age: 25,
};

Object.assign(target, source);
console.log(target); // 输出: { name: 'John', age: 25 }

Object.freeze()

Object.freeze() 方法冻结一个对象,使其属性不可修改。

const person = {
  name: 'John',
};

Object.freeze(person);

person.age = 25; // 操作无效,没有修改属性的权限

console.log(person); // 输出: { name: 'John' }

3. 实现对象 API

下面是一个简单的示例,展示了如何模拟实现几个常用的对象 API:Object.keys()Object.values() 和 Object.entries()

// 模拟实现 Object.keys()
function getKeys(obj) {
  const keys = [];
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      keys.push(key);
    }
  }
  return keys;
}

// 模拟实现 Object.values()
function getValues(obj) {
  const values = [];
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      values.push(obj[key]);
    }
  }
  return values;
}

// 模拟实现 Object.entries()
function getEntries(obj) {
  const entries = [];
  for (let key in obj) {
    if (obj.hasOwnProperty(key)) {
      entries.push([key, obj[key]]);
    }
  }
  return entries;
}

const person = {
  name: 'John',
  age: 25,
};

console.log(getKeys(person)); // 输出: ['name', 'age']
console.log(getValues(person)); // 输出: ['John', 25]
console.log(getEntries(person)); // 输出: [['name', 'John'], ['age', 25]]

在上面的示例中,我们使用自定义函数 getKeys()getValues() 和 getEntries() 来模拟实现了 Object.keys()Object.values() 和 Object.entries() 的功能。

4. 应用场景

JavaScript 对象在前端开发中有广泛的应用场景,包括但不限于以下几个方面:

  • 数据存储和操作:对象允许我们以键值对的形式存储和

操作数据,非常适合表示复杂的数据结构。

  • 面向对象编程:对象是面向对象编程的核心概念,允许我们创建和管理对象的行为和属性。
  • DOM 操作:在前端开发中,我们经常需要操作网页的 DOM 元素,使用对象可以更方便地访问和操作 DOM。
  • 数据交互和传输:在与后端进行数据交互时,常常使用对象来传输和接收数据,例如通过 AJAX 请求返回的 JSON 数据

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1009240.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

cms之wordpress安装教程

1、下载程序 到wordpress官方网站下载wordpress程序,官方下载地址:https://cn.wordpress.org/download/。 下载最新版的wordpress程序 https://cn.wordpress.org/latest-zh_CN.zip 2、上传程序 上传程序前先确认主机是否符合安装的环境要求&#xff…

芯科蓝牙BG27开发笔记7-配置蓝牙参数

基础的要求 1. 设置广播参数为间隔1000ms,不停止 2. 添加广播消息,含01、03、09、FF TYPE 3. 设置蓝牙通信间隔参数为320ms、400ms、2、4000ms超时 3. 配置发射功率为较低 4. 配置GATT所有数据与原Nordic 配置一致 为了解决以上疑问,需…

4.zigbee开发,传感器网络管理进阶(网状和树状拓扑),zigbee的ADC

一。zigbee的串口 1.串口通信的基本概念 (1)同步通信与异步通信 同步通信: 一般情况下同步通信指的是通信双方根据同步信号进行通信的方式。比如通信双方有一个共同的时钟信号,通讯中通常双方会统一规定在时钟信号的上升沿…

DP专题3 使用最小花费爬楼梯

题目: 思路: 根据题意,我们先明确 dp 数组 i 的含义, 这里很明显,可以知道 i 是对应阶梯的最少花费, 其次dp初始化中,我们的 dp[0] 和 dp[1] 是 0 花费, 这是我们可以选择的&am…

关键词生成原创文章软件-原创文章生成软件

大家好,今天我想和大家分享一下我对147SEO关键词生成原创文章工具的感受。作为一个经常需要写作的人,我深知寻找创意和构建文章结构的挑战。关键词生成原创文章似乎为这些问题提供了一种解决方案。 首先,让我谈谈我的感受。关键词生成原创文章…

9个值得收藏的WebGL性能优化技巧

在这里,我们推荐一些经证明非常适合创建基于 Web 的交互体验的优化技术。 本章主要基于 Soft8Soft 在 Verge3Day Europe 2019 会议上的演讲。 推荐:用 NSDT编辑器 快速搭建可编程3D场景 1、几何/网格 几何是 3D 应用程序的基础,因为它构成了…

华为云云耀云服务器实例使用教学

目录 国内免费云服务器(体验) 认识国内免费云服务器 如何开通国内免费云服务器 云耀云服务器 HECS Xshell 远程连接 云服务器更改安全组 切换操作系统 服务器详情 HECS适用于哪些场景? 网站搭建 电商建设 开发测试环境 云端学习环…

二维码智慧门牌管理系统开发解决方案:标准化建设的基础

文章目录 前言一、系统质量保证二、系统互联互通三、系统可扩展性 前言 在现代城市管理和服务中,二维码智慧门牌管理系统扮演着至关重要的角色,它通过智能化和数字化手段提高了城市管理效率、公共服务水平,并有助于维护社会公共安全。然而&a…

macOS 12 Monterey:一次全新的跨设备协作体验

macOS 12 Monterey是苹果公司的一次重大突破,它打破了设备间的壁垒,将不同设备无缝地连接在一起,极大地提升了用户的工作效率和娱乐体验。Monterey带来了通用控制、AirPlay、捷径等新功能,以及一些实用的新小功能。 安装&#xf…

跨链协议支持Sui的资产所有权理念,助力资产在不同链之间流通

区块链通常支持安全地持有数字资产这一概念。然而,在一个链上拥有资产并不意味着它可以转移到另一个链上。支持在不同链之间移动资产的跨链协议有助于解决行业中可能出现的主要碎片化问题。 Sui通过基于开源Wormhole协议构建的Wormhole Connect支持跨链。构建者可以…

【数据分享】1901-2022年1km分辨率逐年降水栅格数据(免费获取/全国/分省)

降水数据是我们在各项研究中最常用的气象指标之一!之前我们给大家分享过1901-2022年1km分辨率逐月降水栅格数据(可查看之前的文章获悉详情)!该数据来源于国家青藏高原科学数据中心,这儿的逐月降水量是指当月的总降水量…

SeaArt.ai: 海艺AI绘画艺术图片模型创作平台

【产品介绍】 • 名称 SeaArt.ai • 具体描述 SeaArt.ai是一个基于人工智能技术的AI绘画工具,它可以根据你的描述或者关键词来生成符合你想象的图片。你可以选择不同的模式来创建不同类型的图片,比如人物、风景、建筑、神话、自…

自动化测试面试题解析,半小时通透

面试一般分为技术面和hr面,形式的话很少有群面,少部分企业可能会有一个交叉面,不过总的来说,技术面基本就是考察你的专业技术水平的,hr面的话主要是看这个人的综合素质以及家庭情况符不符合公司要求,一般来…

液体颗粒计数器如何选择!

随着液体污染检测技术的飞速发展,液体粒子计数器由于计数速度快、准确度高、重复性好、操作简便且结果不受人为因素的影响,成为半导体等领域用于测量和监测液体样品中颗粒物浓度和径向分布的重要工具。 液体粒子计数器是各行各业用于测量和监测液体样品中…

Jmeter+jenkins接口性能测试平台实践整理

最近两周在研究jmeter+Jenkin的性能测试平台测试dubbo接口,分别尝试使用maven,ant和Shell进行构建,jmeter相关设置略。 一、Jmeterjenkins+Shell+tomcat 安装Jenkins,JDK,tomcat,并设置环境变量&#xff…

企业网盘 VS 大文件传输, 哪个才是企业传输的正确选择?

在当今的信息时代,文件传输是企业日常工作中不可或缺的一项功能。无论是内部沟通、外部协作、还是客户服务,都需要高效、安全、便捷地传输各种类型和大小的文件。那么,面对市场上众多的文件传输产品和服务,企业应该如何选择呢&…

指针,动态内存分配

目录 什么是指针 指针重要性 指针的定义 ​指针的分类,指针和 基本类型指针 星号的含义 形参实参 ​指针和数组 指针和一维数组 指针变量的运算 一个指针变量到底站占几个字节 指针和二维数组 动态内存分配 传统数组的缺点 为什么需要动态内存分配 …

Taro小程序隐私协议开发指南填坑

一. 配置文件app.config.js export default {...__usePrivacyCheck__: true,... }二. 开发者工具基础库修改 原因:从基础库 2.32.3 开始支持 修改路径:详情->本地设置->调试基础库 三. 用户隐私保护指引更新 修改路径:mp后台->设…

Oracle数据如何迁移导入到MySQL

使用Navicat工具建立数据连接,进行数据传输 1、打开Navicat工具,分别连接Oracle数据库和MySQL数据库。 2、连接源选择你的oracle数据,目标选mysql 即可成功导入

Python中的异常处理4-2

在《Python中的异常处理4-1》中提到,用except可以捕获所有的异常。实际上,在程序运行的过程中,出现异常的原因有很多,比如下标超出范围、除数为0、变量未定义等。 1 except语句加上具体的异常类型 可以在except语句之后加上具体…