2012-02-14 117 views
28

我正在做一些FF插件开发和我看到的语法是这样的:这是什么JavaScript语法:{Ci,CC}?

var {Cc, Ci} = require('chrome'); 

只是好奇这是什么语法,如果它特别的FF开发或别的东西。

+0

我怎样才能防止它是看起来像在Visual Studio + ReSharper的错误?由于它不被认为是JavaScript的自然语法,因此ReSharper不断将其显示为语法错误,并且无法重新格式化文档。 – 2014-08-26 15:02:42

+0

这个*较早的*问题是如何被标记为2013年问的同一事物的欺骗? – ruffin 2017-04-22 18:04:31

回答

8

请参阅Domenic关于什么语法称为解构赋值的解答。接下来的答案是为什么FF插件开发需要这样做。

有一个关于这是什么以及为什么需要在http://groups.google.com/group/mozilla-labs-jetpack/browse_thread/thread/d288b79903b5b434的讨论。

简短回答是肯定的,它特定于Firefox插件开发。相关文件可在https://addons.mozilla.org/en-US/developers/docs/sdk/1.3/dev-guide/module-development/chrome.html找到。

+5

错误的答案。这是ECMA 6的语法,只是因为Firefox是第一个实现解构赋值的浏览器并不意味着它只与FIrefox插件开发相关。 – 2014-10-23 14:11:49

+2

我想我回答了一个错误的问题 - 我以为他们问为什么你现在需要为FF插件需要('chrome')'。不幸的是答案被接受了,所以我不能删除它。 – Bill 2014-10-23 16:17:22

+0

啊,明白了!我认为很显然'{...} ='语法在这里很奇怪,因为'require('...')'是一个简单的函数调用。但问题并不明确,你是对的! – 2014-10-24 11:45:47

25

这被称为解构赋值。它是JavaScript 1.7的一个特性,在这种情况下,“JavaScript”是指Mozilla对ECMAScript标准的特定扩展。

它被预定为inclusion in the next version of JavaScript

等效的ECMAScript 5的代码将

var __temp = require('chrome'); 
var Cc = __temp.Cc; 
var Ci = __temp.Ci; 
+0

非常感谢,我终于摆脱了编辑器中的语法错误,并且我的代码正在被重新评估。 – razzak 2014-08-04 23:19:56

+0

但它实际上是否会导致变量__temp存在?如果不是,那么等值只是一个粗略的等值。 – hippietrail 2016-05-23 15:40:22