ECMAScript 2018( ES2018 ) 新功能 - 对象 Rest/Spread 属性

yufei       6 年, 4 月 前       707

在最新的 TC39 会议上,投票选举了纳入 「 ECMAScript © 2018 语言规范 」( ES2018 ) 的新提案

令人振奋的消息是,自 ES2017 合并以来已达到第 4 阶段 ( stage-4 ) 的所有提案都已被选中

本文接下来的部分,我们就来看看 ES2018 有哪些新功能吧

第四阶段 ( stage-4)

TC39 委员会的所有提案有一个 5 阶段的过程,从第 0 阶段到第 4 阶段,通过它开发新的语言功能

4 阶段是 「 完成 」阶段

所有处理第 4 阶段的提案都罗列在了 GitHub

对象 Rest/Spread 属性

在解构对象时,对象的 Rest 属性 允许我们将该对象中的某些属性复制到新的对象上

这是一个新的赋值方式

const input = { x:1, y:2, a:3, b:4};
const { x, y,...z } = input;

console.log(x); // 1
console.log(y); // 2
console.log(z); // {a:3, b:4}

这个特性非常好使,特别是在 React ( Native ) 上下文中,从 this.props 中获取某些值供内部使用,然后通过再次传播将所有其他属性转发给返回的子组件

class TxDetail extends React.Component {
    render() {
        const { tx, ...props} = this.props;

        return (<View {...props}>{/* ... */}</View>)
    }
}

甚至,如果我们稍微改变下思维,既然能够从旧的对象上复制属性到新的对象上,那其实也就是一种以不可变的方式删除对象的属性

假如我们有一个 user 对象

const user = {
    firstName: "Bramus",
    lastName:"Van Damme",
    twitter: "bramus",
    city:"Vinkt",
    email:"xxx@xxx.cn"
}

如果我们现在想要创建一个 user 对象的副本,同时去掉 email 属性

引入眼帘的第一想法应该是先复制或克隆这个对象,然后在新对象中删除 email 属性

const userWithoutEmail = Object.assign({}, user);
delete userWithoutEmail.email;

当然了,当有了 解构 功能和 对象 Rest/Spread 属性 后,那么我们就可以使用下面的方式

// 创建一个用户的拷贝,且删除 email 属性
const { email, ...userWithoutEmail} = user;

是不是很有意思...

其实 对象 Rest/Spread 属性 有很多很神奇的用法,只要你能想的到

目前尚无回复
简单教程 = 简单教程,简单编程
简单教程 是一个关于技术和学习的地方
现在注册
已注册用户请 登入
关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.