总结
阿里十分注重你对源码的理解,对你所学,所用东西的理解,对项目的理解。
开源分享:docs.qq.com/doc/DSmRnRG…
name; // => 'Batman',
realName; // => 'Bruce Wayne'
const { name, realName } = hero是对象销毁分配。这个语句定义变量name和realName,然后分配给他们的属性值hero.name和hero.realNamecorrespondigly。
比较两种访问对象属性的方法:
const name = hero.name;
const realName = hero.realName;
// is equivalent to:
const { name, realName } = hero;
可以看到,由于属性名称和对象变量都没有重复,因此对象的分解更加方便。
对象解构的基本语法非常简单:
const { identifier } = expression;
哪里identifier是要访问的属性名称,expression应评估为一个对象。销毁后,变量identifier包含属性值。
这是使用属性访问器的等效代码:
const identifier = expression.identifier;
让我们在实践中尝试对象分解:
const hero = {
name: 'Batman',
realName: 'Bruce Wayne'
};
const { name } = hero;
name; // => 'Batman'
该语句const { name } = hero定义变量name,并使用hero.nameproperty的值对其进行初始化。
要将对象分解为多个属性,请枚举任意数量的属性,并,在之间添加逗号:
const { identifier1, identifier2, ..., identifierN } = expression;
其中identifier1,…identifierN是要访问的属性的名称,expression应评估为对象。销毁后,变量identifier1…identifierN包含相应的属性值。
这是等效的代码:
const identifier1 = expression.identifier1;
const identifier2 = expression.identifier2;
// ...
const identifierN = expression.identifierN;
让我们再次看一下第一部分中的示例,其中提取了2个属性:
const hero = {
name: 'Batman',
realName: 'Bruce Wayne'
};
const { name, realName } = hero;
name; // => 'Batman',
realName; // => 'Bruce Wayne'
const { name, realName } = hero创建2个变量name并realName分配相应属性hero.name和的值hero.realName。
如果已解构的对象不具有在解构分配中指定的属性,则将变量分配给undefined。让我们看看它是如何发生的:
const hero = {
name: 'Batman',
realName: 'Bruce Wayne'
};
const { enemies } = hero;
enemies; // => undefined
解构后的变量enemies是undefined因为该属性enemies在对象中不存在hero。
幸运的是,如果该属性在解构对象中不存在,则可以设置默认值。基本语法如下:
const { identifier = defaultValue } = expression;
哪里identifier是要访问的属性名称,expression应评估为一个对象。销毁后,变量identifier包含属性值,或者defaultValue如果identifier属性不存在则分配给变量。
这是等效的代码:
const identifier = expression.identifier === undefined ?
defaultValue : expression.identifier;
让我们更改先前的代码示例,并使用默认值功能:
const hero = {
name: 'Batman',
realName: 'Bruce Wayne'
};
const { enemies = ['Joker'] } = hero;
enemies; // => ['Joker']
现在,undefined该变量enemies默认为,而不是['Joker']。
如果要创建名称与属性不同的变量,则可以使用对象分解的别名功能。
const { identifier: aliasIdentifier } = expression;
identifier是要访问的属性的名称,aliasIdentifier是变量的名称,expression应评估为对象。销毁后,变量aliasIdentifier包含属性值。
等效代码:
const aliasIdentifier = expression.identifier;
这是一个对象分解别名功能的示例:
const hero = {
name: 'Batman',
realName: 'Bruce Wayne'
};
const { realName: secretName } = hero;
secretName; // => 'Bruce Wayne'
看一下const { realName: secretName } = hero,解构定义了一个新变量secretName(别名变量),并为其分配了值hero.realName。
在前面的示例中,对象很简单:属性具有原始数据类型(例如字符串)。
通常,对象可以嵌套在其他对象中。换句话说,某些属性可以包含对象。
在这种情况下,您仍然可以从深处使用对象分解和访问属性。基本语法如下:
const { nestedObjectProp: { identifier } } = expression;
nestedObjectProp是保存嵌套对象的属性的名称。identifier是要从嵌套对象访问的属性名称。expression应该评估变形后的对象。
销毁后,变量identifier包含嵌套对象的属性值。
上面的语法等效于:
const identifier = expression.nestedObjectProp.identifier;
您可以从中提取属性的嵌套级别不受限制。如果要从深处提取属性,只需添加更多嵌套的花括号:
const { propA: { propB: { propC: { .... } } } } = object;
例如,对象hero包含一个嵌套对象{ city: 'Gotham'}。
const hero = {
name: 'Batman',
realName: 'Bruce Wayne',
address: {
city: 'Gotham'
}
};
// Object destructuring:
const { address: { city } } = hero;
city; // => 'Gotham'
通过对象解构,const { address: { city } } = hero您可以city从嵌套对象访问属性。
您可以将具有动态名称的属性提取到变量中(属性名称在运行时是已知的):
const { [propName]: identifier } = expression;
propNameexpression应该计算为属性名称(通常是字符串),并且identifier应该指示在解构之后创建的变量名称。第二个expression应该评估要分解的对象。
没有对象分解的等效代码:
const identifier = expression[propName];
让我们看一个prop包含属性名称的示例:
const hero = {
name: 'Batman',
realName: 'Bruce Wayne'
};
const prop = 'name';
const { [prop]: name } = hero;
name; // => 'Batman'
const { [prop]: name } = hero是一个对象分解,将变量赋给namevalue hero[prop],其中prop是一个保存属性名称的变量。
rest语法对于在解构之后收集其余属性很有用:
const { identifier, ...rest } = expression;
哪里identifier是要访问的属性名称,expression应评估为一个对象。
销毁后,变量identifier包含属性值。rest变量是具有其余属性的普通对象。
例如,让我们提取属性name,但保留其余属性:
const hero = {
name: 'Batman',
realName: 'Bruce Wayne'
};
const { name, ...realHero } = hero;
realHero; // => { realName: 'Bruce Wayne' }
破坏const { name, ...realHero } = hero提取财产name。
同时,剩余的属性(realName在这种情况下)被收集到变量realHero:中{ realName: 'Bruce Wayne' }。
9.1将属性绑定到变量
如之前的许多示例所示,对象解构将属性值绑定到变量。
对象解构可以给变量赋值使用声明const,let和var。甚至分配给一个已经存在的变量。
例如,以下是使用let语句解构的方法:
// let
const hero = {
name: 'Batman',
};
let { name } = hero;
name; // => 'Batman'
最后
技术是没有终点的,也是学不完的,最重要的是活着、不秃。零基础入门的时候看书还是看视频,我觉得成年人,何必做选择题呢,两个都要。喜欢看书就看书,喜欢看视频就看视频。最重要的是在自学的过程中,一定不要眼高手低,要实战,把学到的技术投入到项目当中,解决问题,之后进一步锤炼自己的技术。
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
技术学到手后,就要开始准备面试了,找工作的时候一定要好好准备简历,毕竟简历是找工作的敲门砖,还有就是要多做面试题,复习巩固。