首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >ES6双变形结构

ES6双变形结构
EN

Stack Overflow用户
提问于 2018-06-23 09:52:32
回答 5查看 14.8K关注 0票数 15

我知道这可能是一个非常基本的问题,但我不太精通ES6,我遇到过这样的语法:

代码语言:javascript
运行
复制
const { rootStore: { routerStore } } = this.props;

我明白这意味着什么:

代码语言:javascript
运行
复制
const { rootStore } = this.props;

(从rootStore中的属性rootStore创建const this.props)。

但是,上述双重解构(我认为是解构)意味着什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-06-23 10:11:07

这被称为嵌套析构,在许多情况下非常有用。

让我们一点一点地理解它。

请看下面的示例:

代码语言:javascript
运行
复制
const person = {
    friend: {
        name: 'john',
        age: 20,
    },
};

const { friend } = person;

console.log(friend);

在这里,我们得到了使用析构的支柱friend的值。因为值本身是一个对象,所以我们也可以使用对它的析构。

在前面的示例中:

代码语言:javascript
运行
复制
const person = {
    friend: {
        name: 'john',
        age: 20,
    },
};

const { friend } = person;

console.log(friend);

const {age} = friend ;

console.log(age) ; 

现在,我们也可以使用析构来获得age道具,这非常实用,但是如果我只需要age道具,而我不需要friend道具呢?我能在一步之内完成以上所有的例子吗?是的!!这就是ES6的惊人之处:

代码语言:javascript
运行
复制
const person = {
    friend: {
        name: 'john',
        age: 20,
    },
};

const { friend :{age} } = person;

console.log(age); 

正如您所看到的,我们在一个步骤中获得age的值,当您有嵌套对象时,这在很多情况下都是有用的。在上面的代码中,如果尝试记录friend的值,就会得到ReferenceError: friend is not defined

你知道吗?你可以使嵌套破坏的深度,你想。看看这个复杂的例子,这只是为了好玩。

代码语言:javascript
运行
复制
const person = {
    friend: {
        name: 'john',
        other: {
            friend: {
                name: {
                    fullName: {
                        firstName: 'demo',
                    },
                },
            },
        },
    },
};

const {
    friend: {
        other: {
            friend: {
                name: {
                    fullName: { firstName },
                },
            },
        },
    },
} = person;

console.log(firstName); // demo

漂亮!!

如果您想了解更多关于销毁的知识,请查看以下资源:

解构赋值MDN

ECMAScript 6中的分解和参数处理

票数 51
EN

Stack Overflow用户

发布于 2018-06-23 09:56:17

这意味着

代码语言:javascript
运行
复制
const {rootStore} = this.props
const {routerStore} = rootStore

但第一行不会生效,即rootStore不会被定义。

票数 5
EN

Stack Overflow用户

发布于 2018-06-23 10:10:17

const { rootStore: { routerStore } } = this.props;

仅仅为了添加我的部分,上面的代码实际上意味着

const { routerStore } = this.props.rootStore;

不是下列情况:

代码语言:javascript
运行
复制
const {rootStore} = this.props
const {routerStore} = rootStore

区别在于,第一个只定义一个常量routerStore,而第二个定义两个常量rootStorerouterStore。所以没有什么区别。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50999968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档