在最新的 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 属性 有很多很神奇的用法,只要你能想的到
目前尚无回复