2015-11-03 65 views
1

有没有人知道这个语法在JavaScript中意味着什么?JavaScript中的奇怪语法示例:`var {variable} = value`

var { variable } = value; 

我发现它在一些代码示例中,我从来没有见过这种情况。这是JavaScript 6吗?我试着用谷歌搜索variable syntaxes6,但没有例子提出这种语法。

下面是完整的例子:

var { Tab } = require('app-dev-kit/tab'); 
var tab = Tab({ properties }); 

最古怪的部分是,如果我放弃从{ Tab }括号那么它不工作(它说Tab是不是在这种情况下,一个功能):

var Tab = require('app-dev-kit/tab'); 
var tab = Tab({ properties }); 

这不起作用:Error: Tab is not a function

+5

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/ Destructuring_assignment – zerkms

回答

4

这是被称为destructuring assignment一个ES6特征,对于阵列(阵列解体)和对象(对象解构)

的解构赋值语法是JavaScript表达式 使得能够提取从数组中的数据的工作原理或使用 语法的对象来反映数组和对象文字的构造。

假设你有一个函数

function foo() { 
    return { bar: 1, baz: 2 }; 
} 

而且你要分配的返回值,局部变量函数的性质。传统上,你会做这样的事情

var f = foo(); 
var bar = f.bar; 
var baz = f.baz; 
console.log(bar); // 1 
console.log(baz); // 2 

有了解构赋值,你可以做到这一点

var {bar, baz} = foo(); 
console.log(bar); // 1 
console.log(baz); // 2 
+0

非常混乱。这是新东西。在这种情况下,任何想法'require('app-dev-kit/tab')'会返回什么?为什么它是这样设计的?我习惯于定期使用'var thing = require('thing')'。 – bodacydo

+1

'console.log()'看看。在这种情况下,它可能返回一个至少有一个属性为“Tab”的对象。 “为什么这样设计?” ---询问图书馆开发人员。 “我习惯了常规” - 好吧。 – zerkms

+0

它实际上适用于任何可迭代的对象,而不仅仅是数组。 –