Javascript ES6去结构化-这有什么作用?
我正试图理解ES6的这种去结构化。有人能解释一下这行代码将编译成什么吗Javascript ES6去结构化-这有什么作用?,javascript,ecmascript-6,Javascript,Ecmascript 6,我正试图理解ES6的这种去结构化。有人能解释一下这行代码将编译成什么吗 const { loading, route: { pageName = 'default' } = {} } = this.props; 不去结构化 const loading = props.loading; const route = props.route.pageName || 'default'; const { loading, route: { pageName = 'default' } = {} }
const { loading, route: { pageName = 'default' } = {} } = this.props;
不去结构化
const loading = props.loading;
const route = props.route.pageName || 'default';
const { loading, route: { pageName = 'default' } = {} } = props;
去结构化
const loading = props.loading;
const route = props.route.pageName || 'default';
const { loading, route: { pageName = 'default' } = {} } = props;
我们在赋值的左侧定义不同的变量,以定义要从源变量中解包的值
加载
和页面名
是变量
props
是源变量
我们刚刚通过将属性名称指定给左手赋值来解压道具对象属性
我们还可以解包嵌套对象,因为您可以在props
因此,在解构过程中,我们将解包对象属性
这里我们给出pageName
默认值,如果它是未定义的
有关道具的更多信息,您将获得两个参数加载和pageName。如果pageName没有值(未定义),它将获得默认字符串值“default”
如果此中没有路由键,则还需要写入“路由”以检查嵌套键(pageName)。如果您提供默认值(空对象),则
我会将其写在下面,以便您轻松掌握:
const
{
loading,
route: {
pageName = 'default'
}
}
this.props is like so :
{
loading,
route: {
pageName
}
}
现在,不管有多深,这都会精确地映射属性。因此,这个.props.load中的任何内容都将进入const中的加载对应项。this.props.route.pageName
中的任何内容都将进入常量中的route.pageName
。如果pageName
在道具中为空或未定义,则会出现“默认”值。这就像在函数调用中没有为函数的参数提供任何值时,为函数的参数提供默认值一样。以最简单的形式编译
const loading = this.props.loading ;
let pageName ;
let route ;
if(this.props.route){
route = this.props.route ;
if(this.props.route. pageName){
pageName = this.props.route. pageName ;
} else {
pageName = 'default' ;
}
} else{
route = {};
}
您正在从此.props.load中提取加载
,并从此.props.route.pageName中提取页面名
,如果没有路由,它将默认设置为空对象{}
如果路由
对象中没有页面名
,它将默认设置为“默认”,这行代码引入了两个常量变量,加载和PageName我经常发现,将新代码放入在线babel编译器并将其反编译为旧版本的js会很有帮助,如果未定义路由
,则不进行结构化的示例将不起作用,您错过了这一部分={}
相当于:props.route=props.route | |{}
然后可以获得pageName
:const pageName=props.route.pageName | |默认值”代码>