函数中的对象
创始人
2025-05-31 00:26:34

系列文章目录

前端系列文章——传送门
JavaScript系列文章——传送门


文章目录

  • 系列文章目录
    • 前言
    • 1、概念
    • 2、定义
    • 3、对象的基本操作
      • 3.1、给对象添加属性(增)
      • 3.2、删除对象中的键值对(删)
      • 3.3、修改对象中的键值对(改)
      • 3.4、访问对象中键的值(查)
    • 4、对象的遍历:
    • 5、方法概念


前言

程序员没对象,那就new一个对象出来!

1、概念

如果我们存储一个人信息的姓名和年龄,需要两个变量:

var name = '张三'
var age = 12

如果存储另一个人的信息,需要再次定义两个变量,但是变量名不能重复,因为重复会覆盖掉上面的变量:

var name1 = '李四'
var age1 = 13

从上面4个变量,可以看出来,每个变量都是独立的,互相之间是没有联系的,如果要将多个变量组合在一起去描述一个人的信息,变量之间没有关系是很容易弄错的。

为了让多个值之间有联系,确保多个值就是用来描述一个人的,就需要对象这种数据来处理。

在学习数据类型的时候,学习过对象这种数据类型,他的表现形式:

var arr = [];
var obj = {};
var none = null;

这三种不同的表现形式指的都是对象。我们让多个不同的值描述一个人,重点看使用{}定义的对象。

2、定义

var obj = {};

这样定义的对象是空数据,其中什么也没有。对象中的值,是由键值对组成。

键值对是指在描述一个事物的时候,需要一个名字,对应一个值,例如:

姓名:张三 // 姓名是键,张三是值
width:100px // width是键,100px是值
border=1 // border是键,1是值

定义有数据的对象,键和值之间使用冒号隔开,键值对之间使用逗号隔开:

var obj = {name:"张三",age:12
}

对象有一个特性,第一次打开的时候,只能看到Object,再次刷新页面, 会显示里面的数据:

对象中键值对的数量没有限制,可以有任意多个:

var obj = {name:"张三",age:12,height:180,weight:150
};

对象中的键都是字符串,只是正常情况下可以省略引号,但如果键中包含连字符,就不能省略引号了:

var obj = {"name":"张三",age:12,height:180,"province-name":"山东省"
};
console.log(obj);

从输出的结果中能看到,书写顺序和显示的顺序是不同的,因为对象中的键值对是没有顺序的。

3、对象的基本操作

3.1、给对象添加属性(增)

var obj = {};
console.log(obj);
obj.name = '李四';
obj["age"] = 12;
console.log(obj);

3.2、删除对象中的键值对(删)

delete 对象.键
delete 对象[键]

例:

var obj = {name:"张三",age:12,height:180
};
console.log(obj);
delete obj.name;
console.log(obj);
delete obj['age']
console.log(obj);

3.3、修改对象中的键值对(改)

如果设置的属性名是对象中已经存在的呢?

var obj = {name:"张三",age:12
}
console.log(obj);
obj.age = 15;
console.log(obj);

3.4、访问对象中键的值(查)

对象.键 # 这种方式的属性名不用加引号
# 或
对象[键] # 这种方式的属性名必须加引号

例:

var obj = {name:"张三",age:12
};
console.log(obj.name);
console.log(obj["age"]);

4、对象的遍历:

遍历的意思就是将每一个值都访问一遍。

js提供了专门用来遍历对象的操作语法:

for(var attr in obj){# 这里的attr代表对象属性名# obj表示这个对象
}

例:

var obj = {name:"张三",age:12,height:180
};
for(var i in obj){ // 这里的i表示对象的属性名,是一个字符串console.log(i,obj[i]);
}

注意:遍历对象时,输出对象中的值,必须使用对象[代表键的变量]这种形式来输出

因为,如果使用.来访问的话,是有歧义的:

var obj = {name:"张三",age:12,height:180
};
// 输出张三
console.log( obj.name );

如果使用一个变量来代替name这个键:

var obj = {name:"张三",age:12,height:180
};
// 输出张三
console.log( obj.name );
var a = 'name'
console.log( obj.a ); // undefined

此时,浏览器会将obj.a识别为:我们正在访问obj中键为a的值,.后面的内容,表示对象中的键的名称,所以此时只能使用[]的形式来访问:

var obj = {name:"张三",age:12,height:180
};
// 输出张三
console.log( obj.name );
var a = 'name'
console.log( obj[a] ); // 张三

此时[]中的a是一个变量,因为没有加引号,代表['name']

5、方法概念

对象中值的类型是没有限制的,可以是任意类型。当值不是函数的时候,我们将这个键值对叫做对象的属性,当值是一个函数的时候,我们将这个键值对叫做对象的方法。

var obj2 = {name:'王五',study:function(){console.log("在学习");}
}
console.log(obj2);

name就是对象obj2的属性,study就是对象obj2方法

方法的访问和属性是一样的:

console.log(obj2.study)
obj2.study(); // 因为函数执行需要调用,所以需要加小括号

相关内容

热门资讯

“代抢票”背后的灰色产业链 抢... “演出经济”蓬勃发展,举办各类演唱会、音乐节等成为各地提升旅游收入、提振消费的“新密码”,热门艺人演...
Vue入门+DRF项目实战-0... 1. 引入Django REST framework 在本章中,我们要大家介绍为什么学习Django...
「VScode」通过VScod... 前言 之前在git的版本管理上,我使用的是sourcetree,说实话...
油价继续下跌?欧佩克宣布将再度... 5月31日,欧佩克线上会议讨论7月增产事宜,同意41.1万桶/日的大规模增产计划。当前,国内化工产业...
在生产计划项目中使用甘特图的5... 在生产计划中,会不断接收很多的订单项目,这时候就需要能够合理安排时间、资...
NOA渗透率超5%?智能汽车赛... 从L2到高速NOA(导航辅助驾驶),再到城区NOA...
赴港上市再添“新军”,背后有茅... 近日,资本市场再度迎来新动态,两家新三板摘牌公司 —— 先通医药与华曦达先后迈向港交所递表,计划转道...
小小科技八年磨剑IPO 第一个... 《投资者网》张伟5月,汽车零部件生产商安徽省小小科技股份有限公司(下称“小小科技”或“公司”)披露了...
精测转2上市价格预测 精测转2基本信息转债名称:精测转2,评级:AA-ÿ...
欧佩克宣布,再度增产! 5月31日,欧佩克线上会议讨论7月增产事宜,同意41.1万桶/日的大规模增产计划。 据新华财经5月3...
js常用循环方式 let list = [{name:'张三',age:22},{name:'李四',age:...
nvmf代码分析 nvmf代码分析NVMf RPC接口文件1、创建RDMA Port监听2、创建NVMf链接nvmf_...
【微服务】—— Nacos设计... 文章目录一、简介Nacos起源Nacos 定位Nacos 优势二、Nacos 总体设计1࿰...
axios 请求其他服务器地址... 场景还原: Vue2项目中在生产环境调用其他服务器请求地址时候会在请求地址默认加上一串当前浏览器域...
一斤便宜10元还要降?榴莲可以... 最近几年,各种知名水果的价格可以说都出现了比较大的变化,特别是最近榴莲的价格持续下降,甚至还有降价的...
图解redis对象(hash ... 哈希表 哈希对象的编码可以是ziplist或者hashtable 条件 ·哈希对象保存的所有键值对的...
C语言再学习 -- C 标准库... 参看:C 标准库 - stdlib.h C 标准库 - 简介 stdlib .h 头...
欧佩克+连续第三次大幅增产,油... 欧佩克连续第三次大幅增产,这一举措无疑给油价带来了巨大压力,恐使其承压下跌。欧佩克作为全球重要的石油...
python 安装包相关命令 查看匹配的版本(大小写敏感)pip -V 查询已经安装了的包,并可以显示相应的版本&...
“2025外贸优品中华行——天... 中新网天津5月31日电 (记者 王君妍)31日,“2025外贸优品中华行—天津站”活动正式启幕。本次...
基于SpringBoot+Vu... 您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦。 &#...
网络技巧|远程桌面连接不上的多... 写在前面的话专注于网络各种技巧和实用工具的分享,都是日常工作中遇到的大大小小问题记录下...
IM即时通讯软件系统源码安卓、... demo软件园每日更新资源,请看到最后就能获取你想要的: ​ 1.《计算机系统结构:解...
讲解一下关于MySQL数据库的... 对于数据库,市面上有着不少的数据库!比如:Oracle数据...
3.1.2数据库体系结构:分布... 3.1.2数据库体系结构:分布式数据库、分布式数据库特点、分布式数据库结构、数据分片、...
学习streamlit-6 系列目录 学习streamlit-1,简介学习streamlit-2,s...
冒泡 VS 插入 VS 选择—... 文章目录什么样的“排序算法”更加优质?排序算法的执行效率排序算法的内存消耗排序算法的稳...
Python 多线程 文章目录一、简介1.1 多线程的特性1.2 GIL二、线程1.2 单线程1.3 多线程三、线程池3....
基于树莓派实现超声波测距 目录 一,写在前面 二,超声波模块说明 ● 模块基本参数 ● IO口接线...
Linux(网络基础---数据... 文章目录0. 前言1. 以太网的帧格式2. 再谈局域网原理3. 汇总整体通信流程,补全...