js获取对象属性的值(讲解js遍历对象属性名获取属性值)

   2023-04-29 互联网0
核心提示:除了普通的对象属性赋值和遍历之外,我们还可以使用 Javascript 对象执行许多其他操作。在本文中,我们将了解如何使用它们,包括访问内部属性、操作属性描述符和继承只读属性。 1. 访问内部属性 Javascript 对象无法以常规方式访

js获取对象属性的值(讲解js遍历对象属性名获取属性值)

除了普通的对象属性赋值和遍历之外,我们还可以使用 Javascript 对象执行许多其他操作。在本文中,我们将了解如何使用它们,包括访问内部属性、操作属性描述符和继承只读属性。

1. 访问内部属性

Javascript 对象无法以常规方式访问的「内部属性」「内部属性」名由双方括号[[]]包围,在创建对象时可用。

「内部属性」不能动态地添加到现有对象。

「内部属性」可以在某些内置 Javascript 对象中使用,它们存储ECMAscript规范指定的内部状态。

有两种「内部属性」,一种操作对象的方法,另一种是存储数据的方法。例如:

[[Prototype]] — 对象的原型,可以为null或对象 [[Extensible]] — 表示是否允许在对象中动态添加新的属性 [[PrivateFieldValues]] — 用于管理私有类字段 2. 属性描述符对象

数据属性包含了一个数据值的位置,在这个位置可以读取和写入值。也就是说,数据属性可以通过 对象.属性 访问,就是我么平常接触的用户赋什么值,它们就返回什么,不会做额外的事情。

数据属性有4个描述其行为的特性(为了表示内部值,把属性放在两对方括号中),称为「描述符对象」

属性解释默认值[[Configurable]]能否通过delete删除属性从而重新定义属性;
能否修改属性的特性;
能否把属性修改为访问器属性true[[Enumerable]]能否通过for-in循环返回属性true[[Writable]]能否修改属性的值true[[Value]]包含这个属性的数据值undefined

value 描述符是属性的数据值,例如,我们有以下对象 :

let foo = { a: 1}

那么,a 的value属性描述符为1。

writable是指该属性的值是否可以更改。默认值为true,表示属性是可写的。但是,我们可以通过多种方式将其设置为不可写。

configurable 的意思是可以删除对象的属性还是可以更改其属性描述符。默认值为true,这意味着它是可配置的。

enumerable 意味着它可以被for … in循环遍历。默认值为true,说明能通过for-in循环返回属性

将属性键添加到返回的数组之前,Object.keys方法还检查enumerable描述符。但是,Reflect.ownKeys方法不会检查此属性描述符,而是返回所有自己的属性键。

Prototype描述符有其他方法,get和set分别用于获取和设置值。

在创建新对象, 我们可以使用Object.defineProperty方法设置的描述符,如下所示:

let foo = { a: 1}Object.defineProperty(foo, \'b\', { value: 2, writable: true, enumerable: true, configurable: true,});

这样得到foo的新值是{a: 1, b: 2}。

我们还可以使用defineProperty更改现有属性的描述符。例如:

let foo = { a: 1}Object.defineProperty(foo, \'a\', { value: 2, writable: false, enumerable: true, configurable: true,});

这样当我们尝试给 foo.a 赋值时,如:

foo.a = 2;

如果关闭了严格模式,浏览器将忽略,否则将抛出一个错误,因为我们将 writable 设置为 false, 表示该属性不可写。

我们还可以使用defineProperty将属性转换为getter,如下所示:

\'use strict\'let foo = { a: 1}Object.defineProperty(foo, \'b\', { get() { return 1; }})

当我们这样写的时候:

foo.b = 2;

因为b属性是getter属性,所以当使用严格模式时,我们会得到一个错误:Getter 属性不能重新赋值。

3.无法分配继承的只读属性

继承的只读属性不能再赋值。这是有道理的,因为我们这样设置它,它是继承的,所以它应该传播到继承属性的对象。

我们可以使用Object.create创建一个从原型对象继承属性的对象,如下所示:

const proto = Object.defineProperties({}, { a: { value: 1, writable: false }})const foo = Object.create(proto)

在上面的代码中,我们将proto.a的 writable 描述符设置为false,因此我们无法为其分配其他值。

如果我们这样写:

foo.a = 2;

在严格模式下,我们会收到错误消息。

总结

我们可以用 Javascript 对象做很多我们可能不知道的事情。

首先,某些 Javascript 对象(例如内置浏览器对象)具有内部属性,这些属性由双方括号包围,它们具有内部状态,对象创建无法动态添加。

Javascript对象属性还具有属性描述符,该属性描述符使我们可以控制其值以及可以设置它们的值,还是可以更改其属性描述符等。

我们可以使用defineProperty更改属性的属性描述符,它还用于添加新属性及其属性描述符。

最后,继承的只读属性保持只读状态,这是有道理的,因为它是从父原型对象继承而来的。

 
标签: 属性 对象 赋值
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与爱美生活网(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 拨号提示电话占线(点击位址属性界面)
    拨号提示电话占线(点击位址属性界面)
    需要修改MAC地址。步骤:1、点击“网络邻居”属性,出现“本地连接”,然后点击属性,出现界面;2、找到界面上的网卡名,点击右边的“配置”;3、点击“高级”选择下面的网络卡位址,然后输入16进制的12位数字,即可拨号上网。
  • 马尔可夫链怎么理解(状态马尔离散可夫)
    马尔可夫链怎么理解(状态马尔离散可夫)
    马尔科夫链是马尔可夫过程与离散时间和离散状态空间。因此,马尔可夫链是一个离散的状态序列,每个状态都从一个离散的状态空间(有限或无有限)中提取的,并且遵循马尔可夫属性。用稍微更数学的术语来说,给定当前状态和过去状态的流程,未来状态的条件分布只
  • 铲子和什么合成暗星(装备铲子属性拳套)
    铲子和什么合成暗星(装备铲子属性拳套)
    云顶之弈游戏中,玩家想要合成暗星需要两件装备,装备分别为金铲子(特殊装备)和拳套(属性为+10%暴击几率以及+10%闪避)。暗星属性为携带者也是一名暗星,并且暗星原名为暗星之心。铲子合成暗星流程:云顶之弈游戏中,玩家想要合成暗星需要两件装备
  • 怎么更改ip地址(属性点击地址选择)
    怎么更改ip地址(属性点击地址选择)
    1、鼠标右键点击“网络”选择属性。2、在弹出的窗口中点击更改适配器设置。3、右键点击以太网选择属性。4、在属性框中选择internet协议版本4,点击属性选项。5、点击使用下面的IP地址跟dns服务器地址,输入好需要的IP地址和dns后点击
  • 梦三国每点属性详细加成(法力属性英雄敏捷)
    梦三国每点属性详细加成(法力属性英雄敏捷)
    竞技中属性点共分3样,力量、敏捷、智力。英雄每加一点力量增加17点生命值和0.03生命恢复速度、每加一点敏捷增加0.14的护甲和1%的攻击速度、每加一点智力14点法力值和0.04法力恢复速度。英雄卡的属性,英雄卡每升一级力量加2点、敏捷加3
  • 什么是公平价值会计(计量会计公允价值)
    什么是公平价值会计(计量会计公允价值)
    公允价值会计又称市值会计,是指以市场价值或未来现金流量的现值作为资产和负债的主要计量属性的会计模式。随着现代交通和通讯技术的发展,在工业社会中相互分割的市场正在走向世界一体化,以交易价格为基础的传统历史成本计量属性已不再是唯一可靠的信息源。
  • 两台电脑之间如何共享文件(如何建立两台电脑文件共享)
    两台电脑之间如何共享文件(如何建立两台电脑文
    首先把两台电脑都设定好IP地址,属性。第二步打开系统共享设置,ip地址自动获得,一台通过路由器能怎么做共享啊具体步骤。再点击设置家庭或小型办公室网络。然后下载一个飞秋。 借助QQ等通讯工具,,笔记本计算机。点击完成。 右击桌面网络,设定好
  • 火炬之光各种颜色装备哪个最好
    火炬之光各种颜色装备哪个最好
    《火炬之光》中的装备分为普通、魔法、稀有、罕见、传奇等五个等级,它们分别对应不同的颜色,红色是最好的装备,传奇装;白色对应普通装;绿色对应魔法装;蓝色对应稀有装;黄色代表罕见装;红色代表传奇装;白色:传统的商店货;绿色:初级装备相当于暗黑里
  • 五味子是凉性还是热性 五味子属性凉还是热呢
    五味子是凉性还是热性 五味子属性凉还是热呢
    1、五味子不是凉性也不是热性的,它属于温性。2、五味子的味道有一些偏酸,如果喝的太多,可能会对肠胃造成一定的刺激。3、平时使用五味子一般是泡水来喝,对于治疗肺虚久咳和提高身体免疫力有一定的功效,而且还可以保护肝脏。但是五味子是一种中药,最好
  • 前置USB接口没反应(属性对话框点击打)
    前置USB接口没反应(属性对话框点击打)
    出现前置USB口问题,比较多的原因是通过主板跳线的方式引到前面去的,有可能是主板的跳线接的不对,或者供电不足。解决方法:1、右键点击我的电脑,在弹出的菜单栏中点击属性,打开属性对话框。2、在属性对话框中点击硬件标签,接着点击设备管理器。打开
点击排行