深入了解Js中的对象
在JavaScript中,对象是个无序的键值对数据集。例如:
var xiaoqiang={
name:"wangqiang",
age:30,
city:"guangzhou",
job:"engineer"
}
上述例子中的小强是一位年轻人,对于这个对象我们用一个括号进行定义。在括号体内我们描述了这个人的几种属性:姓名、年龄、所在城市,工作等。 每一个属性对应一个值,形成了一个数据集。
对象属性的访问、添加、删除
我们可以通过点操作符访问一个对象的属性,访问小强的姓名可以用xiaoqiang.name,也可以用方括号的方式xiaoqiang["name"]的方式。还可以动态添加一个属性, 动态删除一个属性。例如:
xiaoqiang["name"]; //返回wangqiang
xiaoqiang.name; //返回wangqiang
xiaoqiang.height; //undefined
xiaoqiang.height = 1.8 // 给xiaoqiang动态添加了一个属性
delete xiaoqiang.height;
我们还可以通过Object的静态方法defineProperty动态地给一个对象添加属性。下面的例子,我们动态地给xiaoli对象添加一个name属性:
xiaoli = {};
Object.defineProperty(xiaoli,"name",{
value:"xiaoli",
writable:false, // 属性不能修改,
enumerable:true, // 属性可枚举,如:可以通过for ( let item of Object.entries(xiaoli)){...} 的方式枚举属性
})
对象属性的测试
通过in关键字测试对象中的属性,也可以通过Object的hasOwn方法测试对象属性。一个对象的属性包括自有属性和继承来的属性。
"name" in xiaoqiang; //true;
"toString" in xiaoqiang; //true 通过object对象继承的属性
xiaoqiang.hasOwnProperty("age") //true age是xiaoqiang自己的属性
xiaoqiang.hasOwnProperty("toString")//false 通过继承自object的属性,不算自己的属性
Object.hasOwn(xiaoqiang,"age"); //true Object的静态方法判断是否是自己的属性
Object.hasOwn(xiaoqiang,"toString"); //false
Object.getOwnPropertyNames(person); //获取所有自身的属性名称
特殊情况
在定义一个对象时,对象属性的键是字符串类型,一般情况下可以省略单引号或双引号。如果键中包含特殊的字符,那就必须带上双引号或单引号,例如:
var xiaoqiang={
name:"wangqiang",
age:30,
city:"guangzhou",
job:"engineer",
"company-address":"tianhe district,guangzhou" // company-address要加引号
}
xiaoqiang["company-address"]
上述对象xiaoqiang的company-address属性带有特殊的符号,所以定义的时候需用引号包裹起来,在进行属性访问的时候需用方括号
对象属性以及值的遍历
使用Object的entries方法,然后进行遍历
var xiaoqiang={
name:"wangqiang",
age:30,
city:"guangzhou",
job:"engineer",
"company-address":"tianhe district,guangzhou" // company-address要加引号
}
//对象属性的遍历。
for (let item of Object.entries(xiaoqiang)){
console.log(item[0],item[1]);
}
使用Object的keys方法和values方法,然后进行遍历
var xiaoqiang={
name:"wangqiang",
age:30,
city:"guangzhou",
job:"engineer",
"company-address":"tianhe district,guangzhou" // company-address要加引号
}
//对象键的遍历。
for (let item of Object.keys(xiaoqiang)){
console.log(item);
}
//对象值的遍历。
for (let item of Object.values(xiaoqiang)){
console.log(item);
}
对象的冻结、密封、不可扩展
冻结对象:一个冻结对象是指已经不能添加新属性、删除现有属性或修改已有属性的值的对象。使用 Object.freeze() 方法可以将对象转换为冻结对象。
var lihong={};
lihong.name="lihong";
lihong.age=20;
Object.freeze(lihong);
lihong.height = 171; //height属性添加不成功
delete lihong.age; //age属性删除不成功
lihong.name = "Lihong"; //age属性修改不成功
密封对象:一个密封对象是指已经不能添加新属性和删除现有属性的对象,但是可以修改已有属性的值。使用 Object.seal() 方法可以将对象转换为密封对象。
var lihong={};
lihong.name="lihong";
lihong.age=20;
Object.seal(lihong);
lihong.height = 171; //height属性添加不成功
delete lihong.age; //age属性删除不成功
lihong.name = "Lihong"; //name属性可修改的
不可扩展对象:一个不可扩展对象是指已经不能添加新属性的对象,但是可以修改现有属性的值或删除现有属性。使用 Object.preventExtensions() 方法可以将对象转换为不可扩展对象。
var lihong={};
lihong.name="lihong";
lihong.age=20;
Object.preventExtensions(lihong);
lihong.height = 171; //height属性添加不成功
delete lihong.age; //age属性是可删除的
lihong.name = "Lihong"; //name属性是可修改的
文章同时发表在:码农编程网 欢迎访问
本节重点
- 对象是一个无序键值对的数据集;
- 对象的属性必须是字符串、如包含特殊的字符引号包裹起来;
- 对象属性的添加、测试、对象属性和值的遍历;
- 冻结对象、密封对象、不可扩展对象。
深入了解Js中的对象的更多相关文章
- js中判断对象具体类型
大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...
- 浅解析js中的对象
浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...
- js中XMLHttpRequest对象实现GET、POST异步传输
js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...
- JavaScript学习12 JS中定义对象的几种方式
JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...
- js中推断对象详细类型
大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...
- JavaScript学习12 JS中定义对象的几种方式【转】
avaScript学习12 JS中定义对象的几种方式 转自: http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...
- JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘
一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...
- JS中定义对象和集合
在js中定义对象: 方式一: var obj = {}; obj['a']=1; obj['b']=2; 方式二: var obj=new Object(); obj.a=1; obj.b=2; 在j ...
- Js中Map对象的使用
Js中Map对象的使用 1.定义 键/值对的集合. 2.语法 mapObj = new Map() 3.备注 集合中的键和值可以是任何类型.如果使用现有密钥向集合添加值,则新值会替换旧值. 4.属性 ...
- JS中的对象和方法简单剖析
众所周知,在js中对象就是精髓,不理解对象就是不理解js. 那么什么事js中的对象呢? 在js中,几乎一切皆对象: Boolean ,String,Number可以是对象(或者说原生数据被认作对象): ...
随机推荐
- Unity Joint用法及案例
目录 什么是Joint 有哪些Joint Joint计算原理 自由度配置 Axis与Anchor Limit与Spring Drive与Target Joint应用案例 车轮 旋转 悬挂系统 吊臂 旋 ...
- 教你如何用纯css代码实现太极阴阳鱼动画效果
今天看到一个有意思的效果,闲来无事做一个: 把2d静态的太极图改成了3d,阴极和阳极分到了两个平面里实现旋转效果,这个好实现,重点是实现它的透明效果,平面太极图显示出两极是用另加的块元素挡住底面的颜色 ...
- 利用复杂数据类型(eg:对象)时,是直接调用属性快,还是先用变量填装使用快
为了验证,我用时间戳去尝试 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta ch ...
- 选择KV数据库最重要的是什么
本文分享自华为云社区<选择KV数据库最重要的是什么?>,作者:GaussDB 数据库 . 经常有客户提到KV数据库,但却偏偏"不要Redis".比如有个做安全威胁分析平 ...
- 基于Admin.NET框架的前端的一些改进和代码生成处理(1)
Admin.NET 是一套基于Furion/.NET 6实现的通用管理平台,模块插件式开发,框架包含了常规的权限管理.字典等管理模块,以及一些Vue3的Demo案例,框架前后端分离.后端基于基于Fur ...
- STM32 HAL库学习(F407ZGT6) (1)-晶振/时钟树
时钟树(以F407为例) 对于 STM32F4 系列的芯片,正常工作的主频可以达到 168Mhz,但并不是所有外设都需要系统时钟这么高的频率,比如看门狗以及RTC只需要几十Khz的时钟即可.同一个 ...
- xcodebuild命令行工具使用详解
xcodebuild命令行工具使用 如何通过命令行编译ios项目? xcodebuild是一个命令行工具,允许你从命令行对Xcode项目和工作区执行编译.查询.分析.测试和归档操作.它对项目中包含的一 ...
- 二进制安装Kubernetes(k8s) v1.24.2 IPv4/IPv6双栈
二进制安装Kubernetes(k8s) v1.24.2 IPv4/IPv6双栈 Kubernetes 开源不易,帮忙点个star,谢谢了 介绍 kubernetes二进制安装 强烈建议在Github ...
- 在k8s(kubernetes)上安装 ingress V1.1.3
介绍 Ingress 公开了从集群外部到集群内服务的 HTTP 和 HTTPS 路由.流量路由由 Ingress 资源上定义的规则控制. 下面是一个将所有流量都发送到同一 Service 的简单 In ...
- w11修改ie保护模式方法
IE安全设置下有4个区域 对应的设置在不同的注册表中.[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Set ...