ES 6关于const的新语法

时间:2017-02-10 07:06:32

标签: javascript angularjs ecmascript-6

我是ES6的新手,我知道某些事情,但对以下事情仍然有点困惑,任何人都可以向我提供有关这些新语法的一些细节:

以下只是示例代码段:

1. const { action, stage, conditions } = this.control.ajaxInfo; 

究竟是什么叫做?这句话到底会做什么?,我在控制台中尝试了这个,没有任何错误。但是当我试图追踪这3个常量时,它显示未定义。

2. const getControlBindings = (control, context) => ({
    control,
    context,
    setAnswer,
    ajaxAction
  });

这是一个带有一些=和=>的函数符号,那么这种新语法怎么样:

getControlBindings((control, context) => {
    control,
    context,
    setAnswer,
    ajaxAction
})

那么这两种功能之间的主要区别是什么?请帮我低估这个。

3 个答案:

答案 0 :(得分:3)

  1. 是ES2016 / ES6中对象破坏的示例。在这里,3个单独的const与在equals的左侧提到的具有相同名称的参数的值。即行动,阶段,条件。

    var controls = {
        action: 'GET',
        stage: 'Test'
    }
    
    const { action, stage} = controls;
    
    console.log(action) // Outputs GET
    
  2. 是箭头功能的示例。在第一种情况下,你创建一个箭头函数getControllsBinding,它接受控制和上下文参数并返回一个对象

    {control,
     context,
     setAnswer,
     ajaxAction }
    
  3. 另一个定义就像是将箭头函数作为参数传递给getControllsBinding函数。注意这里有一些轻微的语法问题,你需要包装

        {control,
         context,
         setAnswer,
         ajaxAction }
    

    使用下面的括号

        ({control,
         context,
         setAnswer,
         ajaxAction })
    

    以下是从ES2015 / ES6开始的一些好材料

    箭头功能:https://leanpub.com/understandinges6/read#leanpub-auto-arrow-functions

    对象销毁:https://leanpub.com/understandinges6/read#leanpub-auto-object-destructuring

答案 1 :(得分:2)

1)这意味着您的this.control.ajaxInfo对象必须包含具有这些名称的属性,这些属性将被解构为左侧的变量。 有关详情,请参阅Destructing object in JS

var controls = {
  action: 'a',
  stage: 'b',
  conditions: 'c',
}

const { action, stage, conditions } = controls;

console.log(action);

2)它被称为arrow function。它们也是功能但有一些细微差别。

const getControlBindings = (control, context) => ({
    control,
    context,
    setAnswer,
    ajaxAction
  });

这是一个函数,它接受参数控制和上下文并返回一个形状为

的对象
{
   control,
   context,
   setAnswer,
   ajaxAction
}

=>之后的Everythinig是箭头函数的主体。您可以使用

添加箭头功能支架体
 const getControlBindings = (control, context) => { return ({
        control,
        context,
        setAnswer,
        ajaxAction
      }); };

如果添加括号体,则需要明确使用return语句,如果没有添加括号体,则必须编写一个将从函数返回的语句。

答案 2 :(得分:0)

为您找到一个好read。希望它有所帮助。

destructuring

上还有一个