您可以通过 3 种方式访问 JavaScript 中对象的属性:

  1. 点属性访问器:object.property
  2. 方括号属性访问:object['property']
  3. 对象解构:const { property } = object

让我们看看访问属性的每种语法是如何工作的。并了解何时合理,根据情况,使用这种或那种方式。

目录
1. 点属性访问器
1.1 点属性访问器需要标识符
2. 方括号属性访问器
3. 对象解构
3.1 别名变量
3.2 动态属性名称
4. 当属性不存在时
5. 结论

1. 点属性访问器

访问对象属性的常用方法是点属性访问器语法:

expression.identifier

expression应计算为对象,并且是要访问的属性的名称。identifier

例如,让我们访问对象的属性:namehero

const hero = {
name: 'Batman'
};
// Dot property accessor
hero.name; // => 'Batman'

hero.name是一个点属性访问器,用于读取对象 的属性。namehero

可以使用链中的点属性访问器来访问更深层次的属性:。object.prop1.prop2

提前知道属性名称时选择点属性访问器

1.1 点属性访问器需要标识符

当属性名称是有效的标识符时,点属性访问器可以正常工作。JavaScript 中的标识符包含 Unicode 字母、、和数字,但不能以数字开头。$_0..9

这不是问题,因为通常,属性名称是有效的标识符:例如,,。。nameaddressstreetcreatedBy

但有时属性不是有效的标识符:

const weirdObject = {
'prop-3': 'three',
'3': 'three'
};
weirdObject.prop-3; // => NaN
weirdObject.3; // throws SyntaxError: Unexpected number

由于 和 是无效的标识符,因此 dot 属性访问器不起作用:prop-33

  • weirdObject.prop-3计算结果为 ,而不是预期的NaN'tree'
  • weirdObject.3抛出一个 !SyntaxError

为什么表达式 weirdObject.prop-3 的计算结果为 NaN?请在下面的评论中写下您的答案!

若要访问具有这些特殊名称的属性,请使用方括号属性访问器(将在下一节中介绍):

const weirdObject = {
'prop-3': 'three',
'3': 'three'
};
weirdObject['prop-3']; // => 'three'
weirdObject[3]; // => 'three'

方括号语法可以毫无问题地访问具有特殊名称的属性:和 。weirdObject['prop-3']weirdObject[3]

2. 方括号属性访问器

方括号属性访问器具有以下语法:

expression[expression]

第一个应计算为对象,第二个应计算为表示属性名称的字符串。expressionexpression

下面是一个示例:

const property = 'name';
const hero = {
name: 'Batman'
};
// Square brackets property accessor:
hero['name']; // => 'Batman'
hero[property]; // => 'Batman'

hero['name'],并且两者都使用方括号语法读取属性。hero[property]name

当属性名称是动态的时,即在运行时确定时,选择方括号属性访问器

3. 对象解构

基本的对象解构语法非常简单:

const { identifier } = expression;

identifier是要访问的属性的名称,应计算为对象。解构后,变量包含属性值。expressionidentifier

下面是一个示例:

const hero = {
name: 'Batman'
};
// Object destructuring:
const { name } = hero;
name; // => 'Batman'

const { name } = hero是一个对象解构。解构定义了一个值为 property 的变量。namename

当您习惯于对象解构时,您会发现它的语法是将属性提取到变量中的好方法。

当您要创建具有属性值的变量时,请选择对象解构

请注意,您可以根据需要提取任意数量的属性:

const { identifier1, identifier2, .., identifierN } = expression;

3.1 别名变量

如果要访问属性,但要创建与属性名称不同的变量名称,则可以使用别名。

const { identifier: aliasIdentifier } = expression;

identifier是要访问的属性的名称,是变量名称,应计算为对象。解构后,变量包含属性值。aliasIdentifierexpressionaliasIdentifier

下面是一个示例:

const hero = {
name: 'Batman'
};
// Object destructuring:
const { name: heroName } = hero;
heroName; // => 'Batman'

const { name: heroName } = hero是一个对象解构。推断定义一个新变量(而不是上一个示例),并赋值 。heroNamenameheroNamehero.name

3.2 动态属性名称

使对象解构更加有用的是,您可以使用动态值提取到变量属性:

const { [expression]: identifier } = expression;

第一个应计算为属性名称,并且应指示在析构后创建的变量名称。第二个应该计算到您要取消结构的对象。expressionidentifierexpression

下面是一个示例:

const property = 'name';
const hero = {
name: 'Batman'
};
// Object destructuring:
const { [property]: name } = hero;
name; // => 'Batman'

const { [property]: name } = hero是一个对象析构,它在运行时动态地确定要提取的属性。

4. 当属性不存在时

如果访问的属性不存在,则所有 3 个访问器语法都评估为 :undefined

const hero = {
characterName: 'Batman'
};
hero.name; // => undefined
hero['name']; // => undefined
const { name } = hero;
name; // => undefined

该属性在对象 中不存在。因此点属性访问器、方括号属性访问器和解构后的变量的计算结果为 。nameherohero.namehero['name']nameundefined

5. 结论

JavaScript 提供了一堆访问对象属性的好方法。

当您提前知道变量时,dot 属性访问器语法可以很好地工作。object.property

当属性名称是动态的或不是有效的标识符时,更好的替代方法是将属性访问器括起来:。object[propertyName]

对象解构将属性直接提取到变量:中。此外,还可以提取动态属性名称(在运行时确定):。{ property } = object{ [propertName]: variable } = object

访问属性没有好或坏的方法。根据您的具体情况进行选择。

在 JavaScript 中访问对象属性的 3 种方法相关推荐

  1. 如何在Javascript中访问对象的第一个属性?

    本文翻译自:How to access the first property of an object in Javascript? Is there an elegant way to access ...

  2. js之删除对象属性的三种方法 判断对象中是否有某一属性的四种方法

    js之删除对象属性的三种方法 & 判断对象中是否有某一属性的四种方法 示例 1.基础版 var a = { id: 18, age: 20, name: "zhangsan" ...

  3. 遍历对象属性_细说JS遍历对象属性的N种方法

    本人详细介绍了JS遍历对象N种方法,欢迎关注收藏. 遍历对象属性有五种方法,下图为一个场景对比图. 可以注意到两点: 只有for ... in 才可以遍历原型链属性,且只能遍历可枚举属性. Objec ...

  4. JavaScript中window对象属性,时间等的总结

    Window对象是客户端javascript最高层对象之一,只要打开浏览器窗口,不管该窗口中是否有打开的网页,当遇到BODY.FRAMESET或 FRAME元素时,都会自动建立window对象的实例. ...

  5. python添加、修改、删除、访问类对象属性的2种方法

    1.直接添加.修改.删除.访问类对象属性 class Employee (object):empCount = 0 def __init__(self, name, salary) :self.nam ...

  6. js中获取对象属性的3种方式

    js中遍历获取对象属性和方法主要有Object.keys().Object.getOwnPropertyNames().for-in- 区别 1.for in会输出自身以及原型链上可枚举的属性.2.O ...

  7. JavaScript中Array 对象相关的几个方法

    好记性不如烂笔头 push 方法 将新元素添加到一个数组中,并返回数组的新长度值. arrayObj.push([item1 [item2 [. . . [itemN ]]]]) 参数 arrayOb ...

  8. php中获取对象的属性值,PHP获取对象属性的三种方法

    今天查看yii源码,发现yii\base\Model中的attribute()方法是通过反射获取对象的public non-static属性.记得以前看到的代码都是用get_object_vars() ...

  9. JavaScript:数组对象去重的几种方法

    数组对象去重 元素是对象类型的数组的去重我这粗分为两类,一类是当数组中整个元素一样时的去重(这里说的一样是指元素对象中的属性和值都一样),第二类是,元素对象中的某一个属性的值一样时进行去重 // 通用 ...

最新文章

  1. 女友让我破解植物大战僵尸!我干脆撸了一款一样的....翻身舔狗把歌唱呀
  2. poj2446(匈牙利算法)
  3. [Spark][Python]sortByKey 例子
  4. Newtonsoft.Json 的序列化与反序列化
  5. 在Panel上绘图的实现
  6. iOS:图片上传时两种图片压缩方式的比较
  7. Javascript 对象二(Number、String、Boolean、Array、Date、Math、RegExp)
  8. IOC操作Bean管理XML方式(FactoryBean)
  9. php utc时间_PHP转换UNIX时间戳 UTC时间(TZ格式) 标准时间的方法 UNIX UTC GMT时间、本地时间互转...
  10. 关于 VB,VC,Delphi,SDK 的笑话
  11. 大数据架构师学习方向---加油。
  12. 计算机视觉工作项目方案设计,机器视觉(项目方案设计案例)47.pdf
  13. Eight Queens UVa 750
  14. 【转载】基于Redis实现分布式锁
  15. DR模式 + keepalived
  16. 2012年1月份第3周51Aspx源码发布详情
  17. asp毕业设计—— 基于asp+access的网上动态同学录系统设计与实现(毕业论文+程序源码)——同学录系统
  18. 修改窗口的风格ModifyStyle
  19. 安卓虚拟键盘_干货分享:推荐几款性能不错的安卓模拟器
  20. Qt播放视频0x8007000e报错 DirectShowPlayerService::doPlay: Unresolved error code 0x8007000e

热门文章

  1. win10安装graph_tool,在jupyter notebook运行代码
  2. 批处理修改win10密码以及密码提示
  3. 为什么苹果录屏没有声音_苹果手机自带录屏功能,打开声音录制方法
  4. 对贴片陶瓷电容材料的区分
  5. 用python实现相声、评书自动下载(一)
  6. 维特比算法(基于李航)
  7. noip普及组2007 守望者的逃离
  8. HEVC-帧内预测2: initAdiPattern 函数
  9. c语言windows.h头文件详解
  10. mc服务器天赋系统,我的世界战斗狂人的最爱Mod,天赋系统乱入,玩家发展不受限制...